Les drapeaux du démon Docker sont ignorés

environnement:

  • OS : debian 8.0.0-amd64, ubuntu-15.04, 16.04
  • Docker : 1.x.x

procédure:

j'ai changé /etc/default/docker pour ajouter un registre docker privé, puis j'ai redémarré le service docker et finalement essayé de tirer quelque image.

$ 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

a ps sortie ne montre rien à propos de DOCKER_OPTS environment var.

$ ps auxwww|grep docker
root  6919   0.0   0.1   331076   19984 ? Ssl 10:14   0:00 /usr/bin/docker -d -H fd://

Question:

selon la documentation de docker la façon d'utiliser un registre privé est par DOCKER_OPTS dans /etc/default/docker . Pourquoi, après l'avoir fait, il ne prend pas effet dans cet environnement?

Notes:

  • le nom d'hôte du registre privé est correctement résolu par le DNS.
20
demandé sur Camilo Silva 2015-05-08 18:31:33

6 réponses

Chemin Recommandé Docker 17.xx +

il y a plusieurs façons de configurer les drapeaux de démon et les variables d'environnement pour votre démon Docker. Le chemin recommandé est d'utiliser le fichier daemon.json indépendant de la plate-forme, qui est situé dans /etc/docker/ sur Linux par défaut.

donc, pour configurer les registres non sécurisés, faites ce qui suit:

  1. Jeu de l' drapeau suivant dans le fichier /etc/docker/daemon.json :

    {
        "insecure-registries": ["mydocker-registry.net:5000"]
    }
    
  2. "1519170920 De Redémarrage" Docker

     $ sudo systemctl restart docker
    

plus facile à chaque fois!


voie précédemment recommandée avec Docker 1.12

selon documentation docker , la manière recommandée pour configurer les drapeaux de démon et les variables d'environnement pour votre Le démon Docker doit utiliser un systemd 1519440920" drop-in file .

donc, pour ce cas précis, faire ce qui suit:

  1. créez un fichier appelé /etc/systemd/system/docker.service.d/private-registry.conf avec le contenu suivant:

    si elle n'existe pas, créer le répertoire /etc/systemd/system/docker.service.d

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd --insecure-registry mydocker-registry.net:5000
    
  2. changements de couleur:

    $ sudo systemctl daemon-reload
    
  3. Redémarrer Docker:

     $ sudo systemctl restart docker
    

voilà!


voie non recommandée

modifier le fichier /lib/systemd/system/docker.service

...
[Service]
ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS
...
EnvironmentFile=-/etc/default/docker
...

puis exécuter

systemctl daemon-reload
systemctl restart docker

vérifier que /etc/default/docker est chargé

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 

C'est ça.

54
répondu Camilo Silva 2018-02-02 20:34:48

les choses semblent avoir changé dans Ubuntu 16.04 utilisant docker 1.12.x . D'après la mise à jour de documentation

ajouter DOCKER_OPTS="-g /mnt/somewhere/else/docker/ --storage-driver=overlay2" à /etc/default/docker

Modifier le fichier /lib/systemd/system/docker.service

...
[Service]
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
...
EnvironmentFile=-/etc/default/docker
...

puis exécuter:

sudo systemctl daemon-reload
sudo systemctl restart docker
7
répondu psychok7 2017-01-20 14:15:19

les systèmes basés sur Systemd ne lisent pas les configurations / etc/default, vous devez les mettre dans /etc/systemd maintenant, Voir aussi bogue docker bogue docker #12926

il y a une documentation officielle sur le site Docker maintenant, se référer à contrôle et configurer Docker avec systemd .

vous ne devriez jamais Hacker directement les fichiers de service pour la configuration.

testé et travaille sur L'Arche et Systèmes basés sur Debian-j'ai dû inclure l'option d'Ignorer toutes les directives obsolètes D'Environnementfile (voir aussi la référence de Docker lié, mais je ne l'ai pas vu au début et j'ai pensé qu'elle n'était pas nécessaire):

-EnvironmentFile=/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon ...
6
répondu Gregor 2016-11-05 13:25:28

Systemd n'est vraiment pas conçu pour ajouter options de démarrage ou D'environnement. La meilleure façon et aussi la plus indépendante de la plate-forme est d'utiliser le /etc/docker/daemon.json fichier de configuration .

Voici:

cat > /etc/docker/daemon.json <<DOCKERCONFIG
{
  "labels": ["foo=bar"],
  "insecure-registries": ["mydocker-registry.net:5000"]
}
DOCKERCONFIG
3
répondu ColinM 2016-10-14 02:12:34

Ubuntu solution spécifique à l'insécurité-registre via DOCKER_OPTS

parce que...

$ dpkg --list | grep -i docker
ii  docker.io                          1.12.3-0ubuntu4~16.04.2            amd64        Linux container runtime

...livré avec...

$ 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

...(Spécifiquement: ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS ) vous pouvez faire une approche hybride combinant le [réponse choisie] "voie recommandée " et l'utilisation de DOCKER_OPTS pour éviter de souffler sur l'option -H fd:// si vous deviez redéfinir 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
1
répondu Bruno Bronosky 2017-05-23 12:26:03

j'ai eu un défi similaire. Quand j'ai commencé à chercher à commencer à déplacer certains systèmes de Ubuntu 14.04 à Ubuntu 16.04. Mon but était d'utiliser un fichier de configuration dockerd avec des options dockerd (DOCKER_OPTS) pour Ubuntu 16.04 (systemd) et Ubuntu 14.04 (Upstart) autres que /etc/docker/daemon.json. J'ai choisi de ne pas utiliser /etc/docker/daemon.JSON pour la configuration du démon docker parce que json ne supporte pas les commentaires.

je voulais qu'un design systemd utilise un contrôleur fichier, qui ne modifie que les drapeaux dockerd. Il utilise le fichier de configuration par défaut de Docker systemd (/lib/systemd/system / docker.service) pour d'autres réglages du Docker. Un autre objectif était de personnaliser systemd sur chaque système après chaque changement ou de démarrage.

ça résout mon défi. Il peut vous aider.

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
0
répondu Bradley Allen 2018-08-10 18:56:53