Docker (systemd) ignora a mudança do diretório padrão (docker.service)

1

Desejo implementar o docker em um servidor, mas quero que todos os dados relacionados ao docker estejam em uma partição separada do sistema básico. Assim, montei a referida partição em '/ srv' e fiz as seguintes alterações, de acordo com a documentação oficial :

Este é o meu arquivo '/ usr / lib / systemd / system / docker.service' :

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

[Service]
Type=notify
EnvironmentFile=-/srv/docker/docker.conf
ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
Also=docker.socket
WantedBy=multi-user.target

Este é o arquivo '/ srv / docker / docker.conf' que é referenciado dentro do arquivo 'docker.service':

$OPTIONS="--graph /srv/docker --storage btrfs"

O daemon do docker é iniciado corretamente e também PUXA imagens. O problema é que ainda não armazena nada dentro do diretório '/ srv / docker'.

Além disso, quando eu executo 'ps -aux | grep docker ', o que eu obtenho é isto:

root       661  0.4  0.2 351080 17044 ?        Ssl  19:33   0:00 /usr/bin/docker -d -H fd://

A linha de comando pára em 'fd: //'. Parece-me que '$ OPTIONS' está sendo negligenciado por uma razão ou outra.

Agora, há algum problema com a maneira como faço referência aos arquivos? Há algo mais acontecendo aqui? A razão pela qual estou fazendo todas essas alterações de configuração é que eu realmente gostaria de manter todos os dados relacionados ao docker sob o diretório '/ srv / docker /'.

Alguma idéia?

UPDATE 1:

Eu mudei o arquivo 'docker.conf', como sugerido na seção de respostas. Agora:

$OPTIONS="--graph /srv/docker --storage btrfs"

tornou-se:

OPTIONS="--graph /srv/docker --storage btrfs"

Isso teve a conseqüência (inesperada) do daemon do docker não iniciar. Esta é a mensagem de depuração de 'systemctl status docker':

[root @ V12 ~] # docker de status do systemctl ● docker.service - Docker Application Container Engine    Carregado: carregado (/usr/lib/systemd/system/docker.service; enabled; predefinido do fornecedor: desativado)    Ativo: falhou (Resultado: código de saída) desde Qui 2015-02-05 20:13:31 EET; 14s ago      Documentos: link   Processo: 776 ExecStart = / usr / bin / docker - d -H fd: // $ OPTIONS (code = exited, status = 2)  PID principal: 776 (código = finalizado, status = 2)

    
por dsljanus 04.02.2015 / 16:51

3 respostas

1
Primeiramente, quero agradecer a @MichaelHampton por sua resposta. Foi no local, e eu nunca teria visto o erro de digitação com o '$' ('OPÇÕES = ...' em vez de '$ OPTIONS = ...').

Agora, o problema estava nas opções de linha de comando. Na documentação do docker, o argumento para alterar o driver de armazenamento é dado como:

--storage btrfs

Tenha em mente que estes são os documentos da versão 1.4, que é a versão que tenho. Infelizmente, a sintaxe correta, como evidenciado pelo 'docker --help', é:

--storage-driver btrfs

Assim, depois de fazer a alteração necessária, o daemon é iniciado corretamente, as imagens são puxadas dentro do diretório '/ srv / docker' e está tudo bem.

A moral é sempre ser um pouco desconfiada das documentações oficiais, especialmente para projetos em desenvolvimento pesado, como o Docker. Mais uma vez obrigado a todos por suas contribuições.

    
por 06.02.2015 / 09:13
1

Você tem um erro no seu arquivo /srv/docker/docker.conf .

$OPTIONS="--graph /srv/docker --storage btrfs"

A especificação de uma variável não deve começar com $; o $ só deve ser usado ao usar a variável mais tarde.

Altere para:

OPTIONS="--graph /srv/docker --storage btrfs"
    
por 05.02.2015 / 16:53
0

Inicialmente, passei um bom tempo mexendo com o script anterior do upstart / sysv de /etc/init.d/docker e seu arquivo de configuração /etc/default/docker . Foi muito estranho que simplesmente não funcionasse, não importa o que eu tentei, então, eventualmente, percebi que systemd apenas ignora ambos, já que eu estava usando o script legado diretamente.

A solução proposta parece não funcionar 100% no meu 15.04 com lxc-docker-1.7.0 instalado do PPA do estivador oficial, pois o EnvironmentFile parece estar ausente do arquivo de configuração docker do meu systemd .

Uma opção seria editá-lo no local e adicioná-lo usando este comando:

sudo systemctl edit docker --full

Mas isso corre o risco de ser substituído pela próxima atualização, então minha solução foi criar uma substituição, executando

sudo systemctl edit docker

Então decidi apenas redefinir o comando ExecStart na nova substituição de configuração, em vez de também adicionar e fazer referência a um novo arquivo de configuração em /srv/docker/docker.conf .

[Service]
ExecStart=
ExecStart=/usr/bin/docker -d -H fd:// --storage btrfs

Não há erro no snippet acima, por algum motivo estranho que tem a ver com a maneira como systemd lê suas substituições de configuração, um valor precisa ser definido primeiro com um valor vazio e, em seguida, reatribuído ao novo valor. / p>

Depois que fiz isso, o daemon começou feliz e finalmente consegui usá-lo.

    
por 27.06.2015 / 20:26