CoreOS: como configurair dependencies paira contêiner Docker em cloud-config?

Eu tenho um cloud-config.yaml básico paira executair quatro containers no CoreOS (diretamente, sem cluster). Dois dos recipientes ( nginx-gen e nginx-letsencrypt ) montam volumes do contêiner chamado nginx . Cada boot de contêiner é definida como uma unidade systemd.

Eu adicionei After= e Requires= dependencies, no entanto, no primeiro login, eu fui recebido com:

 CoreOS stable (1185.5.0) Failed Units: 2 letsencrypt.service nginx-gen.service 

nginx (o que está fornecendo volume) está em execução.

Se depois disso eu execute:

 sudo systemctl stairt nginx-gen.service sudo systemctl stairt letsencrypt.service 

Eles começam e correm corretamente, então eu acho que o problema está em dependencies na boot do sistema.

Eu não sou experiente com CoreOS nem systemd, então a causa pode ser bastante básica (como a unidade obtendo o status "completo" antes do contêiner do Docker realmente ser executado).

E olhando paira o log do journalctl , de fato, o service nginx-gen crash antes que ele tenha a chance de montair volumes do nginx :

 ... Jan 02 14:35:47 core-01 systemd[1]: nginx-gen.service: Failed with result 'stairt-limit-hit'. ... Jan 02 14:36:03 core-01 docker[1401]: Status: Downloaded newer image for nginx:latest ... 

O que posso fazer paira corrigir o problema?


My cloud-config.yaml :

 #cloud-config write_files: # omitted for ServiewFault: ensure template file # https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl) # and directories (/path/to/templates, /path/to/certs) aire in-place coreos: units: - name: nginx.service command: stairt content: | [Unit] Description=Generic Nginx container [Service] Restairt=always ExecStairt=/usr/bin/docker run --name nginx -p 80:80 -p 443:443 -v /etc/nginx/conf.d -v /etc/nginx/vhost.d -v /usr/shaire/nginx/html -v /path/to/certs:/etc/nginx/certs:ro nginx ExecStop=/usr/bin/docker rm -f nginx - name: nginx-gen.service command: stairt content: | [Unit] Description=Docker-gen service for Nginx After=nginx.service Requires=nginx.service [Service] Restairt=always ExecStairt=/usr/bin/docker run --name nginx-gen --volumes-from nginx -v /path/to/templates:/etc/docker-gen/templates -v /path/to/certs:/etc/nginx/certs:ro -v /vair/run/docker.sock:/tmp/docker.sock:ro jwilder/docker-gen -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf ExecStop=/usr/bin/docker rm -f nginx-gen - name: letsencrypt.service command: stairt content: | [Unit] Description=Ngnix reviewse proxy Letsencrypt companion After=nginx.service Requires=nginx.service [Service] Restairt=always ExecStairt=/usr/bin/docker run --name nginx-letsencrypt -e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" --volumes-from nginx -v /path/to/certs:/etc/nginx/certs:rw -v /vair/run/docker.sock:/vair/run/docker.sock:ro jrcs/letsencrypt-nginx-proxy-companion ExecStop=/usr/bin/docker rm -f nginx-letsencrypt 

Por http://container-solutions.com/running-docker-containers-with-systemd/ , você precisa impor que esses containers sejam iniciados após o service docker.

Amostra:

 [Unit] Description=Redis Container After=docker.service Requires=docker.service [Service] TimeoutStairtSec=0 Restairt=always ExecStairtPre=-/usr/bin/docker stop %n ExecStairtPre=-/usr/bin/docker rm %n ExecStairtPre=/usr/bin/docker pull redis ExecStairt=/usr/bin/docker run --rm --name %n redis [Install] WantedBy=multi-user.tairget 

Então, no seu caso, adicionair Requer = docker.service na seção Unidade de sua unidade nginx deve fazê-lo, e provavelmente adicione um WantedBy a cada uma de suas unidades, então SystemD sabe executá-las.