O problema é a opção -d
, que faz com que o sistema acredite que a unidade do sistema trava e remove o processo, que ainda está sendo executado em segundo plano.
Remover o -d
deve funcionar
Eu executo um contêiner app
-container do docker com um data
-container anexado. Para mantê-lo, mesmo com as atualizações de host do CoreOS, eu uso um arquivo de unidade do systemd como abaixo. Estou um pouco intrigado com o fato de o systemctl restart drone
não funcionar.
Execução inicial:
docker rm -f drone_data;
docker rm -f drone;
docker run --name "drone_data" drone_data sh;
docker run -d -p 1234:4321 --volumes-from=drone_data -v /var/run/docker.sock:/var/run/docker.sock --name "drone" drone
arquivo da unidade systemctl:
Description=Drone CI (Docker Container)
Requires=docker.service
After=docker.service
[Service]
User=core
Restart=on-failure
RestartSec=10
ExecStart=/usr/bin/docker start drone
ExecStop=-/usr/bin/docker stop drone
[Install]
WantedBy=multi-user.target
O problema é a opção -d
, que faz com que o sistema acredite que a unidade do sistema trava e remove o processo, que ainda está sendo executado em segundo plano.
Remover o -d
deve funcionar
Eu não criaria uma unidade Systemd para isso. O Docker já cobre esse caso de uso sem adicionar configuração adicional.
Você pode dizer ao daemon do estivador para reiniciar um contêiner no caso de ele existir usando --restart=always
no comando run
( link ). Você só precisa ter o daemon do docker ativado ( systemctl enable docker
).
Seu comando usando --restart=always
ficaria assim:
docker run -d --restart=always -p 1234:4321 --volumes-from=drone_data -v /var/run/docker.sock:/var/run/docker.sock --name "drone" drone