ubuntu - latest - docker hub
Banderas del demonio Docker ignoradas (6)
Manera recomendada Docker 17.xx +
Hay varias formas de configurar las banderas de daemon y las variables de entorno para su daemon Docker. La forma recomendada es usar el archivo daemon.json
independiente de la plataforma, que se encuentra en /etc/docker/
en Linux de forma predeterminada.
Entonces, para configurar registros inseguros, haga lo siguiente:
Establezca la siguiente bandera en el archivo
/etc/docker/daemon.json
:{ "insecure-registries": ["mydocker-registry.net:5000"] }
Reiniciar Docker
$ sudo systemctl restart docker
¡Más fácil cada vez!
Manera previamente recomendada con Docker 1.12
De acuerdo con la documentación de la ventana acoplable , la forma recomendada de configurar las banderas de daemon y las variables de entorno para su daemon Docker es usar un archivo de acceso directo del sistema .
Entonces, para este caso específico, haga lo siguiente:
Cree un archivo llamado
/etc/systemd/system/docker.service.d/private-registry.conf
con el siguiente contenido:Si no existe, cree el directorio
/etc/systemd/system/docker.service.d
[Service] ExecStart= ExecStart=/usr/bin/dockerd --insecure-registry mydocker-registry.net:5000
Cambios de descarga:
$ sudo systemctl daemon-reload
Reiniciar Docker:
$ sudo systemctl restart docker
Voila!
Forma no recomendada
Edite el archivo /lib/systemd/system/docker.service
...
[Service]
ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS
...
EnvironmentFile=-/etc/default/docker
...
Entonces ejecuta
systemctl daemon-reload
systemctl restart docker
Verifique que /etc/default/docker
esté cargado
ps auxwww | grep docker
root 4989 0.8 0.1 265540 16608 ? Ssl 10:37 0:00 /usr/bin/docker -d -H fd:// --insecure-registry
Eso es.
Ambiente:
- SO : debian 8.0.0-amd64, ubuntu-15.04, 16.04
- Docker : 1.xx
Procedimiento:
Cambié /etc/default/docker
para agregar un registro privado de docker, luego reinicié el servicio de docker y finalmente traté de extraer alguna imagen.
$ cat /etc/default/docker
DOCKER_OPTS="--insecure-registry mydocker-registry.net:5000"
$ service docker restart
$ docker pull mydocker-registry.net:5000/testdb
FATA[0000] Error: v1 ping attempt failed with error: Get https://mydocker-
registry.net:5000/v1/_ping: dial tcp: lookup mydocker-registry.net: no
such host. If this private registry supports only HTTP or HTTPS with an
unknown CA certificate, please add `--insecure-registry mydocker-
registry.net:5000` to the daemon''s arguments. In the case of HTTPS, if
you have access to the registry''s CA certificate, no need for the flag;
simply place the CA certificate at /etc/docker/certs.d/mydocker-
registry.net:5000/ca.crt
Una salida ps
no muestra nada sobre el entorno DOCKER_OPTS var.
$ ps auxwww|grep docker
root 6919 0.0 0.1 331076 19984 ? Ssl 10:14 0:00 /usr/bin/docker -d -H fd://
Pregunta:
Según la documentación de la ventana acoplable, la forma de usar un registro privado es a través de DOCKER_OPTS en /etc/default/docker
. ¿Por qué, después de hacer eso, no tiene efecto en este entorno?
Notas:
- El nombre de host del registro privado es resuelto correctamente por el DNS.
Solución específica de Ubuntu para registro inseguro a través de DOCKER_OPTS
Porque...
$ dpkg --list | grep -i docker
ii docker.io 1.12.3-0ubuntu4~16.04.2 amd64 Linux container runtime
... se envía con ...
$ cat /etc/systemd/system/multi-user.target.wants/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
[Install]
WantedBy=multi-user.target
... (Específicamente: ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
) puede hacer un enfoque híbrido combinando la ["Respuesta recomendada ] de " forma recomendada "y el uso de DOCKER_OPTS
para evitar volar sobre la -H fd://
opción si tuviera que redefinir ExecStart
# The docker.io package doesn''t create a systemd drop-ins directory, so we will
$ mkdir -p /etc/systemd/system/docker.service.d
$ cat > /etc/systemd/system/docker.service.d/10-insecure-registry.conf <<EOF
[Service]
Environment="DOCKER_OPTS=--insecure-registry docker.internal:5000"
EOF
Las cosas parecen haber cambiado en Ubuntu 16.04
usando la 1.12.x
acoplable 1.12.x
Basado en la documentación actualizada.
Agregue DOCKER_OPTS="-g /mnt/somewhere/else/docker/ --storage-driver=overlay2"
a /etc/default/docker
Edite el archivo /lib/systemd/system/docker.service
...
[Service]
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
...
EnvironmentFile=-/etc/default/docker
...
Luego ejecuta:
sudo systemctl daemon-reload
sudo systemctl restart docker
Los sistemas basados en Systemd no leen las configuraciones predeterminadas de / etc /, usted tiene que ponerlos en / etc / systemd ahora, vea también bug docker bug # 12926
Ahora hay una documentación oficial en el sitio de Docker, consulte Control y configuración de Docker con systemd .
Nunca debe hackear directamente los archivos de servicio para la configuración.
Probado y funciona en sistemas basados en Arch y Debian. Sin embargo, tuve que incluir la opción de ignorar las directivas obsoletas de EnvironmentFile (vea también la referencia de Docker vinculada, pero no la detecté al principio y pensé que no era necesaria):
-EnvironmentFile=/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon ...
Systemd realmente no está diseñado para agregar opciones a ExecStart o Environment. La mejor forma, y también la más independiente de la plataforma, es usar el archivo de configuración /etc/docker/daemon.json
.
Mirad:
cat > /etc/docker/daemon.json <<DOCKERCONFIG
{
"labels": ["foo=bar"],
"insecure-registries": ["mydocker-registry.net:5000"]
}
DOCKERCONFIG
Tuve un reto similar. Cuando comencé a buscar comenzar a mover algunos sistemas de Ubuntu 14.04 a Ubuntu 16.04. Mi objetivo era usar un archivo de configuración dockerd con indicadores dockerd (DOCKER_OPTS) para Ubuntu 16.04 (systemd) y Ubuntu 14.04 (Upstart) distintos de /etc/docker/daemon.json. Elegí no usar /etc/docker/daemon.json para la configuración del daemon docker porque json no admite comentarios.
Quería un diseño de sistema para usar un archivo de anulación, que solo modifica las marcas de dockerd. Utiliza el archivo de configuración predeterminado de systemd de Docker (/lib/systemd/system/docker.service) para otras configuraciones de Docker. Otro objetivo era personalizar systemd en cada sistema después de cada cambio o arranque.
Resuelve mi reto. Te puede ayudar.
https://github.com/BradleyA/docker-scripts/tree/master/dockerd-configuration-options
git clone https://github.com/BradleyA/docker-scripts
cd docker-scripts/dockerd-configuration-options