2015-01-04 13 views
12

Ho modificato /etc/default/docker con DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" (finestra mobile versione 1.4.1 in ubuntu 14.04), ma non ha alcun effetto per me (non ascolto alla porta 2375). Sembra che la finestra mobile non legga questo file di configurazione iniziale perché ho trovato che l'ambiente export http_proxy non funziona troppo.DOCKER_OPTS non funziona nel file di configurazione/etc/default/docker

Solo sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d funziona.

Mi ha davvero confuso!

+1

Solo per chiarire, si riavvia il servizio di finestra mobile dopo la modifica di '/ etc/default/docker'? –

+0

Sì, lo riavvio ancora e ancora – seanlook

risposta

1

Dopo aver controllato il codice sorgente finestra mobile (config.go e flags.go), direi che le opzioni che si possono passare in $DOCKER_OPTS sono opzioni per finestra mobile stesso, e -H o --host è un'opzione per finestra mobile daemon. Come soluzione alternativa per risolvere il problema, è possibile modificare il file script di inizazione che si sta utilizzando per includere l'opzione -H lì. Per esempio:

  • Se si utilizza il sistema upstart init, modificare il file /etc/init/docker.conf cambiando la riga exec con exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
  • Se si utilizza il sistema sysvinit init, modificare il file /etc/init.d/docker cambiare le linee che iniziano con qualcosa del tipo:

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 $? ;;

+0

Shoud '/ etc/default/docker' è il file di configurazione di avvio del daemon docker? Molti articoli (inclusi [documenti ufficiali] (https://docs.docker.com/articles/networking/)) mi hanno detto di impostare 'DOCKER_OPTS' in'/etc/default/docker' non in ambiente bash. – seanlook

+0

Sì, dovrebbe. E gli script di inizializzazione caricatore caricano/etc/default/finestra mobile. Ho provato e nel mio ambiente (Linux Mint 17 -Ubuntu 14.04- e docker 1.4.1) funziona se imposto 'DOCKER_OPTS =" - H tcp: //127.0.0.1: 2375 -H unix: /// var/run /docker.sock "'. Sto usando il sistema init predefinito (upstart), e dovresti usare lo stesso. Controlla il file '/ etc/init/docker.conf' per vedere se sta caricando il file di configurazione. Dovrebbe apparire: 'if [-f/etc/default/$ UPSTART_JOB]; poi ./Etc/default/$ UPSTART_JOB; fi' –

+0

'/ etc/default/docker' ora funziona per me dopo il riavvio del mio server ubuntu. – seanlook

3

ho appena incontrato lo "stesso" problema.

Ho notato che tutte le opzioni in/etc/default/docker sono effettivamente commentate per impostazione predefinita.

Ho rimosso il # davanti a DOCKER_OPTS, riavviato e ha funzionato come previsto.

Penso che le versioni precedenti di docker (1.3) non avessero queste opzioni commentate per impostazione predefinita, almeno non ricordo di dover rimuovere il simbolo #.

+0

Questo mi ha aiutato quando stavo eseguendo la finestra mobile 17.xx + e docker-compose 1.18 su ubuntu 16.04 –

7

Ho avuto lo stesso problema.

Ubuntu 14.10 utilizza systemd anziché sysv-init/upstart. Forse dovresti esaminare /lib/systemd/system/docker.service per modificare le opzioni.

+0

Per completezza, dovrai quindi eseguire i seguenti comandi (con 'sudo' se necessario)' systemctl daemon-reload' e 'service docker restart' –

+0

Inoltre,' journalctl' è un comando utile per vedere tutti i messaggi se il servizio non si avvia. –

14

Vedere qui per le versioni successive di Debian/Ubuntu che utilizzano systemd.

Questo link spiega come modificare correttamente un file unità systemd per lavorare con DOCKER_OPTS: https://github.com/docker/docker/issues/9889

In sostanza si crea un file /etc/systemd/system/docker.service.d/docker.conf e specificare le sostituzioni Là.

che dovevo fare qualcosa di simile a quanto segue nel file di cui sopra per lanciare finestra mobile con la variabile d'ambiente DOCKER_OPTS in un ambiente 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 

finestra mobile attuale processo di installazione sembra trascurare il file unità systemd.

+0

Ho avuto successo con un docker.conf più minimale che sovrascrive solo le parti di '/ lib/systemd/system/docker.service' che volevo modificare. – Aneel

19

consigliato Way Docker 17.xx +

Ci sono un certo numero di modi per configurare le bandiere daemon e le variabili di ambiente per il demone di Docker.recommended way utilizza il file daemon.json indipendente dalla piattaforma, che si trova in /etc/docker/ su Linux per impostazione predefinita.

Così, per la configurazione di presa (s) Daemon connettersi, effettuare le seguenti operazioni:

  1. Impostare il seguente flag nel file daemon.json:

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

    $ sudo systemctl restart docker 
    

Più facile ogni volta!


precedenti di Docker 1.x

Secondo docker documentation, Il metodo consigliato per configurare le bandiere daemon e le variabili di ambiente per il demone di Docker è quello di utilizzare un systemddrop-in di file.

Quindi, per questo caso specifico, effettuare le seguenti operazioni:

  1. Creare un file denominato /etc/systemd/system/docker.service.d/custom.conf con il seguente contenuto:

    [Service] 
    ExecStart= 
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock 
    
  2. cambiamenti Flush:

    $ sudo systemctl daemon-reload 
    
  3. Riavvia finestra mobile:

    $ sudo systemctl restart docker 
    

Non consigliato Way

Modificare il file /lib/systemd/system/docker.service

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

Quindi eseguire:

$ systemctl daemon-reload 
$ systemctl restart docker 
+0

Il modo consigliato non ha funzionato completamente per me perché -H è già impostato. Ho dovuto usare anche parte del metodo precedente https://stackoverflow.com/a/44055659/467082 – blackbox

1

In risposta alle osservazioni systemd in combinazione con Ubuntu: Ubuntu 14.04 ancora utilizza Upstart, quindi le modifiche a /etc/default/docker avrebbe dovuto avere l'effetto desiderato. Non è fino al 15.04 che Ubuntu ha iniziato ad usare systemd di default.

Nel caso si abbia Ubuntu 15.04 o successivo e quindi si debba usare systemd, o se si sceglie esplicitamente di usare systemd prima di 15.04, il modo corretto e più semplice per ottenere l'effetto desiderato del PO, un socket TCP, potrebbe essere:

  1. Creare il file /etc/systemd/system/docker.service.d/docker-tcp.conf
  2. Aggiungere il contenuto di seguito
  3. Esegui sudo systemctl daemon-reload
  4. Esegui sudo systemctl restart docker

contenuto dei file:

[Service] 
ExecStart= 
ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375 
0

Ho avuto una sfida simile. Quando ho iniziato a cercare di iniziare a spostare alcuni sistemi da Ubuntu 14.04 a Ubuntu 16.04. Il mio obiettivo era quello di utilizzare un file di configurazione dockerd con flag dockerd (DOCKER_OPTS) sia per Ubuntu 16.04 (systemd) che Ubuntu 14.04 (Upstart) diverso da /etc/docker/daemon.json. Ho scelto di non utilizzare /etc/docker/daemon.json per la configurazione del daemon docker perché json non supporta i commenti.

Volevo un design systemd per utilizzare un file override, che modifica solo i flag dockerd. Usa il file di configurazione systemd di default Docker (/lib/systemd/system/docker.service) per altre impostazioni di Docker. Un altro obiettivo era quello di personalizzare systemd su ciascun sistema dopo ogni modifica o avvio.

Risolve la mia sfida. Potrebbe aiutarti.

git clone https://github.com/BradleyA/docker-scripts 
cd docker-scripts/dockerd-configuration-options 
Problemi correlati