Desejo implantar 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' referenciado dentro do arquivo 'docker.service':
$OPTIONS="--graph /srv/docker --storage btrfs"
O daemon do docker inicia corretamente e também PULLs imagens. O problema é que ele ainda não armazena nada dentro do diretório '/srv/docker'.
Além disso, quando executo 'ps -aux | grep docker', o que recebo é isto:
root 661 0.4 0.2 351080 17044 ? Ssl 19:33 0:00 /usr/bin/docker -d -H fd://
A linha de comando para em 'fd://'. Parece-me que '$ OPTIONS' está sendo negligenciado por um motivo ou outro.
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 realmente gostaria de manter todos os dados relacionados ao docker no diretório '/srv/docker/'.
Alguma ideia?
ATUALIZAÇÃO 1:
Alterei meu arquivo 'docker.conf', conforme sugerido na seção de respostas. Agora:
$OPTIONS="--graph /srv/docker --storage btrfs"
passou a ser:
OPTIONS="--graph /srv/docker --storage btrfs"
Isso teve a consequência (inesperada) de o daemon do docker não iniciar. Esta é a mensagem de depuração do 'systemctl status docker':
[root@V12 ~]# systemctl status docker ● docker.service - Docker Application Container Engine Carregado: carregado (/usr/lib/systemd/system/docker.service; ativado; predefinido do fornecedor: desativado) Ativo: com falha (Resultado: sair -code) desde qui 2015-02-05 20:13:31 EET; 14s ago Docs: http://docs.docker.com Processo: 776 ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS (código=exited, status=2) PID principal: 776 (código= saiu, status=2)
Você tem um erro em seu
/srv/docker/docker.conf
arquivo.A especificação de uma variável não deve começar com um $; o $ só deve ser usado ao usar a variável posteriormente.
Altere para:
Em primeiro lugar, quero agradecer a @MichaelHampton por sua resposta. Estava certo e eu nunca teria notado o erro de digitação com o '$' ('OPTIONS=...' 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 é fornecido como:
Lembre-se de que esta é a documentação da versão 1.4, que é a versão que tenho. Infelizmente, a sintaxe correta, conforme evidenciado por 'docker --help' é:
Então, depois de fazer a alteração necessária, o daemon inicia corretamente, as imagens são PULL-ed dentro do diretório '/srv/docker' e está tudo bem.
A moral é sempre desconfiar um pouco das documentações oficiais, principalmente para projetos em desenvolvimento pesado, como o Docker. Mais uma vez, obrigado a todos por suas contribuições.
Inicialmente, passei um bom tempo mexendo no upstart/sysv initscript anterior
/etc/init.d/docker
e em seu arquivo de configuração/etc/default/docker
. Era muito estranho que simplesmente não funcionasse, não importa o que eu tentasse, então, eventualmente, percebi quesystemd
apenas ignorava os dois, já que estava usando o script herdado diretamente.A solução proposta não parece funcionar 100% no meu 15.04 com
lxc-docker-1.7.0
instalado a partir do docker oficial PPA, poisEnvironmentFile
parece estar faltando no meu arquivodocker
desystemd
configuração do.Uma opção seria editá-lo no local e adicioná-lo usando este comando:
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
Então decidi apenas redefinir o
ExecStart
comando na nova substituição de configuração, em vez de também adicionar e referenciar um novo arquivo de configuração em/srv/docker/docker.conf
.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 primeiro definido com um valor vazio e, em seguida, reatribuído ao novo valor.Assim que fiz isso, o daemon começou feliz e finalmente consegui usá-lo.