informatica:linux:docker
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
informatica:linux:docker [2019/05/15 11:10] – [Sin docker compose] javi | informatica:linux:docker [2022/06/09 09:18] – jose | ||
---|---|---|---|
Line 35: | Line 35: | ||
sudo service docker restart | sudo service docker restart | ||
+ | |||
+ | ===== Habilitar debug ===== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | 1. Editar: | ||
+ | |||
+ | sudo vim / | ||
+ | |||
+ | Y añadir: | ||
+ | |||
+ | < | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 2. Recargar el servicio: | ||
+ | |||
+ | sudo kill -SIGHUP $(pidof dockerd) | ||
+ | | ||
+ | 3. Ver logs | ||
+ | |||
+ | sudo tail -F / | ||
+ | | ||
+ | |||
+ | |||
====== Ejecutar como no root ====== | ====== Ejecutar como no root ====== | ||
Line 121: | Line 148: | ||
====== Cambiar politica de reinicio de contenedor ====== | ====== Cambiar politica de reinicio de contenedor ====== | ||
+ | https:// | ||
+ | |||
+ | Miramos que política tiene: | ||
+ | docker inspect container_name| jq -r ' | ||
+ | < | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ^Flag^Description^ | ||
+ | |no|Do not automatically restart the container. (the default)| | ||
+ | |on-failure|Restart the container if it exits due to an error, which manifests as a non-zero exit code.| | ||
+ | |always|Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details)| | ||
+ | |unless-stopped|Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.| | ||
+ | |||
- | Con el contenedor corriendo: | + | Para cambiarlo |
docker update --restart unless-stopped container_name | docker update --restart unless-stopped container_name | ||
Line 298: | Line 342: | ||
network-private: | network-private: | ||
name: network-private | name: network-private | ||
+ | </ | ||
+ | |||
+ | 2. Levantar el entorno: | ||
+ | |||
+ | < | ||
+ | docker-compose up -d | ||
+ | </ | ||
+ | |||
+ | 3. Realizar las mismas pruebas que en el apartado anterior (re-crear el contenedor se tendrá que hacer a mano, sin docker-compose) | ||
+ | |||
+ | 4. Para limpiar: | ||
+ | |||
+ | 4.1. Eliminar a mano " | ||
+ | |||
+ | < | ||
+ | docker stop server_b && docker rm server_b | ||
+ | </ | ||
+ | |||
+ | 4.2. Pararlo todo | ||
+ | |||
+ | < | ||
+ | docker-compose down | ||
</ | </ | ||
Line 360: | Line 426: | ||
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_id | docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_id | ||
+ | |||
+ | * Obtener puertos que tiene abiertos internamente (con jq): | ||
+ | |||
+ | docker inspect container_id |jq .[].NetworkSettings.Ports | ||
* Renombrar container: | * Renombrar container: | ||
Line 1018: | Line 1088: | ||
Para mostrar estadísticas de consumo de recursos por contenedor: | Para mostrar estadísticas de consumo de recursos por contenedor: | ||
- | docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}" | + | |
====== Usar variables de entorno en tiempo de arranque ====== | ====== Usar variables de entorno en tiempo de arranque ====== | ||
Line 1073: | Line 1143: | ||
docker stop test && docker rm test && docker rmi localhost/ | docker stop test && docker rm test && docker rmi localhost/ | ||
</ | </ | ||
+ | |||
+ | ====== Timezone ====== | ||
+ | |||
+ | Para ganar tiempo dejo algunos ejemplos de cómo configurar el timezone dependiendo de la imagen | ||
+ | |||
+ | ===== Alpine ===== | ||
+ | |||
+ | Hay que hacer 2 cosas: | ||
+ | |||
+ | 1. Instalar el paquete " | ||
+ | |||
+ | < | ||
+ | apk add tzdata | ||
+ | </ | ||
+ | |||
+ | 2. Configurar la variable de entorno " | ||
+ | |||
+ | ===== Debian (p.ej.python: | ||
+ | |||
+ | Hay que hacer 1 cosa: | ||
+ | |||
+ | 1. Crear un enlace simbólico. En este ejemplo usamos la variable " | ||
+ | |||
+ | < | ||
+ | ln -snf / | ||
+ | </ | ||
+ | |||
+ | |||
====== Errores ====== | ====== Errores ====== | ||
Line 1153: | Line 1251: | ||
docker ps | grep dns | docker ps | grep dns | ||
+ | ===== ERROR: Service ' | ||
+ | |||
+ | Escenario: | ||
+ | |||
+ | * Uso docker compose | ||
+ | * Uso build dentro del docker compose | ||
+ | * La imagen y la versión se pasan por parámetro | ||
+ | |||
+ | **docker-compose.yml** | ||
+ | |||
+ | < | ||
+ | version: ' | ||
+ | services: | ||
+ | |||
+ | | ||
+ | build: | ||
+ | | ||
+ | args: | ||
+ | - IMAGE=${IMAGE} | ||
+ | - VERSION=${VERSION} | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | **Dockerfile** (dentro de ' | ||
+ | |||
+ | < | ||
+ | ARG IMAGE | ||
+ | |||
+ | ARG VERSION | ||
+ | |||
+ | FROM $IMAGE: | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | **.env** | ||
+ | |||
+ | < | ||
+ | IMAGE= | ||
+ | VERSION=latest | ||
+ | </ | ||
+ | |||
+ | Solución: | ||
+ | |||
+ | Revisar que las variables " | ||
+ | |||
+ | ===== ERROR: yaml.parser.ParserError: | ||
+ | |||
+ | Error completo: | ||
+ | |||
+ | < | ||
+ | ERROR: yaml.parser.ParserError: | ||
+ | in " | ||
+ | expected <block end>, but found '< | ||
+ | in " | ||
+ | </ | ||
+ | |||
+ | Asegurarse que todos los servicios están alineados a la misma altura. | ||
+ | |||
+ | **KO** | ||
+ | |||
+ | < | ||
+ | version: ' | ||
+ | services: | ||
+ | |||
+ | logrotate-legacy: | ||
+ | build: | ||
+ | context: ./ | ||
+ | dockerfile: Dockerfile | ||
+ | container_name: | ||
+ | environment: | ||
+ | - LOGROTATE_LOGFILES=/ | ||
+ | volumes: | ||
+ | - / | ||
+ | |||
+ | | ||
+ | container_name: | ||
+ | image: ${LOGROTATE_IMAGE_LOCAL}/ | ||
+ | restart: ${LOGROTATE_RESTART} | ||
+ | volumes: | ||
+ | - ${LOGROTATE_VOLUME_PLC_HOST}: | ||
+ | build: | ||
+ | # | ||
+ | | ||
+ | args: | ||
+ | - IMAGE=${LOGROTATE_IMAGE} | ||
+ | - VERSION=${LOGROTATE_VERSION} | ||
+ | - LOGROTATE_LOGFILES=${LOGROTATE_LOGROTATE_LOGFILES} | ||
+ | |||
+ | networks: | ||
+ | | ||
+ | name: ${NETWORK_LOGROTATE} | ||
+ | |||
+ | </ | ||
+ | |||
+ | **OK** | ||
+ | |||
+ | < | ||
+ | version: ' | ||
+ | services: | ||
+ | |||
+ | | ||
+ | build: | ||
+ | context: ./ | ||
+ | dockerfile: Dockerfile | ||
+ | container_name: | ||
+ | environment: | ||
+ | - LOGROTATE_LOGFILES=/ | ||
+ | volumes: | ||
+ | - / | ||
+ | |||
+ | | ||
+ | container_name: | ||
+ | image: ${LOGROTATE_IMAGE_LOCAL}/ | ||
+ | restart: ${LOGROTATE_RESTART} | ||
+ | volumes: | ||
+ | - ${LOGROTATE_VOLUME_PLC_HOST}: | ||
+ | build: | ||
+ | # | ||
+ | | ||
+ | args: | ||
+ | - IMAGE=${LOGROTATE_IMAGE} | ||
+ | - VERSION=${LOGROTATE_VERSION} | ||
+ | - LOGROTATE_LOGFILES=${LOGROTATE_LOGROTATE_LOGFILES} | ||
+ | |||
+ | networks: | ||
+ | | ||
+ | name: ${NETWORK_LOGROTATE} | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== does not match any of the regexes: ' | ||
+ | |||
+ | Error completo: | ||
+ | |||
+ | < | ||
+ | ERROR: The Compose file ' | ||
+ | networks.network-rafa-db value ' | ||
+ | </ | ||
+ | |||
+ | **Causa** | ||
+ | |||
+ | Un bloque, en este caso dentro de networks, no está alineado correctamente | ||
+ | |||
+ | **Solución** | ||
+ | |||
+ | 1. Identificar el bloque, en este caso " | ||
+ | |||
+ | 2. Revisar las entradas. Una de ellas tiene un espacio de más o de menos | ||
+ | |||
+ | ===== Servidor tarda en apagarse esperando por contenedores docker ===== | ||
+ | https:// | ||
informatica/linux/docker.txt · Last modified: 2023/03/16 10:18 by jose