web-dev-qa-db-fra.com

DOCKER_OPTS ne fonctionne pas dans le fichier de configuration/etc/default/docker

J'ai changé /etc/default/docker avec DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" (la version 1.4.1 de docker dans Ubuntu 14.04), mais cela n'a aucun effet pour moi (je n'écoute pas au port 2375). Il semble que docker ne lise pas ce fichier de configuration initial car j'ai trouvé que export http_proxy environnement ne fonctionnait pas trop.

Seul Sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d fonctionne.

Cela m'a vraiment dérouté!

16
seanlook

Selon la documentation de docker , Pour configurer les indicateurs de démon et les variables d’environnement de votre démon Docker, il est recommandé d’utiliser un fichier systemd _ ​​fichier à insérer

Donc, pour ce cas spécifique, procédez comme suit:

  1. Utilisez la commande Sudo systemctl edit docker.service pour ouvrir un fichier de substitution pour docker.service dans un éditeur de texte.

  2. Ajoutez ou modifiez les lignes suivantes en remplaçant vos propres valeurs.

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
    
  3. Enregistrez le fichier.

  4. Rechargez la configuration systemctl.

     $ Sudo systemctl daemon-reload
    
  5. Redémarrer Docker:

     $ Sudo systemctl restart docker.service
    
  6. Vérifiez si le changement a été pris en compte en consultant la sortie de netstat pour confirmer que dockerd est à l'écoute sur le port configuré.

    $ Sudo netstat -lntp | grep dockerd
    tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
    
27
Camilo Silva

Voir ici pour les versions ultérieures de Debian/Ubuntu qui utilisent systemd.

Ce lien explique comment modifier correctement un fichier unité systemd pour fonctionner avec DOCKER_OPTS: https://github.com/docker/docker/issues/9889

En gros, vous créez un fichier /etc/systemd/system/docker.service.d/docker.conf et vous spécifiez vos remplacements.

J'ai dû faire quelque chose comme ceci dans le fichier susmentionné pour lancer le menu fixe avec la variable d'environnement DOCKER_OPTS dans un environnement systemd:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker -d $DOCKER_OPTS -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

Le processus d'installation actuel du menu fixe semble négliger le fichier d'unité systemd.

14
Ross

J'ai eu le même problème.

Ubuntu 14.10 utilise systemd au lieu de sysv-init/upstart. Peut-être devriez-vous regarder dans /lib/systemd/system/docker.service pour changer les options.

7
kuttifunk

Je viens de rencontrer le "même" problème.

J'ai remarqué que toutes les options du/etc/default/docker sont en fait commentées par défaut.

J'ai enlevé le # devant DOCKER_OPTS, redémarré et cela a fonctionné comme prévu.

Je pense que les versions précédentes de docker (1.3) n’avaient pas ces options commentées par défaut, du moins je ne me souviens pas d’avoir dû supprimer le signe #.

3
Daniel

En réponse aux commentaires de systemd associés à Ubuntu: Ubuntu 14.04 utilise toujours Upstart. Les modifications apportées à /etc/default/docker devraient donc avoir l'effet souhaité. Ce n’est que vers 15.04 que Ubuntu a commencé à utiliser systemd par défaut.

Si vous avez Ubuntu 15.04 ou une version ultérieure et que vous avez donc besoin d'utiliser systemd, ou si vous choisissez explicitement d'utiliser systemd avant 15.04, le moyen le plus correct et le plus simple d'obtenir l'effet souhaité de l'OP est d'utiliser un socket TCP: :

  1. Créez le fichier /etc/systemd/system/docker.service.d/docker-tcp.conf
  2. Ajoutez le contenu ci-dessous
  3. Exécuter Sudo systemctl daemon-reload
  4. Exécuter Sudo systemctl restart docker

Contenu du fichier:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --Host=tcp://127.0.0.1:2375
1
Forage

Après avoir vérifié le code source du docker ( config.go et flags.go ), je dirais que les options que vous pouvez transmettre dans $DOCKER_OPTS sont des options pour docker lui-même et -H ou --Host est une option pour docker daemon . Pour résoudre votre problème, vous pouvez modifier le fichier de script d’initialisation utilisé pour y inclure l’option -H. Par exemple:

  • Si vous utilisez le système upstart init, éditez le fichier /etc/init/docker.conf en modifiant la ligne d’exécution avec exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS.
  • Si vous utilisez sysvinit init system, éditez le fichier /etc/init.d/docker en modifiant les lignes de départ avec quelque chose comme:

Utilisez cette commande:

start-stop-daemon --start --background \
    --no-close \
    --exec "$DOCKER" \
    --pidfile "$DOCKER_SSD_PIDFILE" \
    --make-pidfile \
    -- \
        -H "tcp://127.0.0.1:2375" \
        -H "unix:///var/run/docker.sock" \
        -d -p "$DOCKER_PIDFILE" \
        $DOCKER_OPTS >> \
        "$DOCKER_LOGFILE" 2>&1 
    log_end_msg $?
    ;;
1
Javier Cortejoso

L'utilisation du fichier platform indépendantdaemon-configuration-file semble beaucoup plus propre.

Ajoutez "hosts" à votre /etc/docker/daemon.json (ou /custom/path/to/daemon/config.json si vous utilisez l'option --config-file au démarrage de la dockerd):

{
...
"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
...
}

redémarrez le démon:

Sudo systemctl restart docker
0
Kashyap

J'ai eu un défi similaire. Lorsque j'ai commencé à déplacer certains systèmes d'Ubuntu 14.04 à Ubuntu 16.04. Mon objectif était d'utiliser un fichier de configuration dockerd avec des indicateurs 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 car json ne prend pas en charge les commentaires. 

Je voulais qu'une conception systemd utilise un fichier de remplacement, qui ne modifie que les indicateurs dockerd. Il utilise le fichier de configuration Docker systemd par défaut (/lib/systemd/system/docker.service) pour d’autres paramètres Docker. Un autre objectif était de personnaliser systemd sur chaque système après chaque modification ou démarrage.

Cela résout mon défi. Cela 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
Bradley Allen