it-swarm-eu.dev

DOCKER_OPTS nefungují v konfiguračním souboru/etc/default/docker

Změnil jsem /etc/default/docker s DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" (ukotvitelnou verzi 1.4.1 v ubuntu 14.04), ale pro mě to nemá žádný vliv (nepočítám na portu 2375). Zdá se, že ukotvitelný nečte tento počáteční konfigurační soubor, protože jsem zjistil, že prostředí export http_proxy nefunguje.

Pouze Sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d pracuje.

To mě opravdu zmatilo!

16
seanlook

Podle dokumentace docker , Doporučený způsob konfigurace příznaků démona a proměnných prostředí pro démona Docker je použití příkazu systemd _ ​​drop-in file

V tomto konkrétním případě postupujte takto:

  1. Pomocí příkazu Sudo systemctl edit docker.service otevřete soubor pro přepsání souboru docker.service v textovém editoru.

  2. Přidejte nebo upravte následující řádky nahrazením vlastních hodnot.

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
    
  3. Uložte soubor.

  4. Znovu načtěte konfiguraci systemctl.

     $ Sudo systemctl daemon-reload
    
  5. Restartovat Docker:

     $ Sudo systemctl restart docker.service
    
  6. Zkontrolujte, zda byla změna provedena, když zkontrolujete výstup netstat, abyste potvrdili, že dockerd naslouchá na nakonfigurovaném portu.

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

Zde naleznete novější verze Debianu/Ubuntu, které používají systemd.

Tento odkaz vysvětluje, jak správně upravit soubor systémové jednotky pro práci s DOCKER_OPTS: https://github.com/docker/docker/issues/9889

V podstatě vytvoříte soubor /etc/systemd/system/docker.service.d/docker.conf a určíte jeho přepsání.

Ve výše uvedeném souboru jsem musel udělat něco takového, abych spustil docker s proměnnou prostředí DOCKER_OPTS v systémovém prostředí:

[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

Zdá se, že aktuální instalační proces docker zanedbává soubor systemd.

14
Ross

Měla jsem stejný problém.

Ubuntu 14.10 používá systemd místo sysv-init/upstart. Možná byste se měli podívat do /lib/systemd/system/docker.service a změnit možnosti.

7
kuttifunk

Právě jsem narazil na "stejný" problém.

Všiml jsem si, že ve výchozím nastavení jsou všechny možnosti v souboru/etc/default/docker ve skutečnosti komentovány.

Odstranil jsem # před DOCKER_OPTS, restartoval a fungoval tak, jak bylo zamýšleno.

Myslím, že předchozí verze docku (1.3) neměly tyto možnosti ve výchozím nastavení komentovány, alespoň si nepamatuju, že musím odstranit znak #.

3
Daniel

V odpovědi na komentáře systemd v kombinaci s Ubuntu: Ubuntu 14.04 stále používá Upstart, takže změny /etc/default/docker měly mít požadovaný efekt. Ve výchozím nastavení systém Ubuntu nepoužíval až do 15.04.

V případě, že máte Ubuntu 15.04 nebo novější, a proto potřebujete použít systemd, nebo pokud se výslovně rozhodnete použít systemd před 15.04, správný a nejjednodušší způsob, jak získat požadovaný efekt soketu OP TCP, by byl :

  1. Vytvořit soubor /etc/systemd/system/docker.service.d/docker-tcp.conf
  2. Přidejte obsah níže
  3. Spustit Sudo systemctl daemon-reload
  4. Spustit Sudo systemctl restart docker

Obsah souboru:

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

Po kontrole docker zdrojového kódu ( config.go a flags.go ) bych řekl, že volby, které můžete předat v $DOCKER_OPTS, jsou volby pro samotný ukotvitel, a -H nebo --Host je volba pro docker . Jako řešení tohoto problému můžete upravit soubor skriptu init, který používáte, a zahrnout zde možnost -H. Například:

  • Pokud používáte upstart init systém, upravte soubor /etc/init/docker.conf změnou řádku exec pomocí exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
  • Pokud používáte sysvinit init systém, upravte soubor /etc/init.d/docker změnou startovních řádků na něco jako:

Použijte tento příkaz:

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

Zdá se, že použití souboru nezávislé na platformědaemon-configuration-file je mnohem čistší.

Přidejte "hosts" do souboru /etc/docker/daemon.json (nebo /custom/path/to/daemon/config.json pokud používáte volbu --config-file při spuštění dockerd):

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

restartujte démona:

Sudo systemctl restart docker
0
Kashyap

Měl jsem podobnou výzvu. Když jsem začal hledat, aby se některé systémy přesunuly z Ubuntu 14.04 do Ubuntu 16.04. Mým cílem bylo použít jeden konfigurační soubor dockerd s dockerd příznaky (DOCKER_OPTS) pro Ubuntu 16.04 (systemd) a Ubuntu 14.04 (Upstart) jiné než /etc/docker/daemon.json. Rozhodl jsem se nepoužít /etc/docker/daemon.json pro konfiguraci dokovací démona, protože json nepodporuje komentáře. 

Chtěl jsem, aby systémový design používal přepsaný soubor, který pouze modifikuje dockerd příznaky. Používá výchozí konfigurační soubor systému Docker (/lib/systemd/system/docker.service) pro další nastavení Docker. Dalším cílem bylo přizpůsobit systemd na každém systému po každé změně nebo bootování.

Řeší můj úkol. To vám může pomoci.

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