2015-04-24 2 views
4

У меня есть две службы в моем docker-compose.yml: docker-gen и nginx. Docker-gen связан с nginx. Для работы docker-gen я должен передать фактическое имя или хэш контейнера nginx, чтобы docker-gen мог перезапустить nginx при изменении.Использование среды vars контейнера в командной клавише docker-compose

Когда я связываю docker-gen с nginx, в контейнере docker-gen появляется набор переменных окружения, наиболее интересным для меня является NGINX_NAME - это имя контейнера nginx.

Таким образом, должно быть легко положить $NGINX_NAME в command поле обслуживания и заставить его работать. Но $NGINX_NAME не расширяется, когда я запускаю службы. Просматривая журналы докер-генераторного я вижу строки:

2015/04/24 12:54:27 Sending container '$NGINX_NAME' signal '1' 
2015/04/24 12:54:27 Error sending signal to container: No such container: $NGINX_NAME 

Мой docker_config.yml выглядит следующим образом:

nginx: 
    image: nginx:latest 
    ports: 
    - '80:80' 
    volumes: 
    - /tmp/nginx:/etc/nginx/conf.d 

dockergen: 
    image: jwilder/docker-gen:latest 
    links: 
    - nginx 
    volumes_from: 
    - nginx 
    volumes: 
    - /var/run/docker.sock:/tmp/docker.sock 
    - ./extra:/etc/docker-gen/templates 
    - /etc/nginx/certs 
    tty: true 
    command: > 
    -watch 
    -only-exposed 
    -notify-sighup "$NGINX_NAME" 
    /etc/docker-gen/templates/nginx.tmpl 
    /etc/nginx/conf.d/default.conf 

Есть ли способ поставить переменные окружения заполнителя в команде, так что может расшириться до фактического значения, когда контейнер вверх?

+0

Является ли переменная env не анализируемой и просто передается как строка? Попробуйте снять двойные кавычки и отправить сообщение назад. –

+0

Спасибо за ответ. Если я удалю двойные кавычки, я получаю одно и то же сообщение. То же самое касается '$ {NGINX_NAME}' – Perlence

+0

. Я думаю, что переменные окружения не заменены, потому что точка входа docker-gen является '/ usr/local/bin/docker-gen', а не'/bin/sh -c'. Он просто не знает, что делать с переменными. – Perlence

ответ

3

Я добавил entrypoint установку для dockergen службы и изменил command немного:

dockergen: 
    image: jwilder/docker-gen:latest 
    links: 
    - nginx 
    volumes_from: 
    - nginx 
    volumes: 
    - /var/run/docker.sock:/tmp/docker.sock 
    - ./extra:/etc/docker-gen/templates 
    - /etc/nginx/certs 
    tty: true 
    entrypoint: ["/bin/sh", "-c"] 
    command: > 
    " 
    docker-gen 
    -watch 
    -only-exposed 
    -notify-sighup $(echo $NGINX_NAME | tail -c +2) 
    /etc/docker-gen/templates/nginx.tmpl 
    /etc/nginx/conf.d/default.conf 
    " 

имена контейнеров впрыскивается путем Докер связывающую начать с «/», но когда я посылаю SIGHUP в контейнеры с слэша, то сигнал не поступает:

$ docker kill -s SIGHUP /myproject_dockergen_1/nginx 

Если я уберу его, nginx перезапустится, как следует. Итак, эта часть $(echo $NGINX_NAME | tail -c +2) здесь, чтобы удалить первый символ от $NGINX_NAME.

+0

Большое спасибо за это. Ты поставил меня на правильный путь. Я полностью пропустил сообщение «неспособный reststart nginx». – cstrutton

Смежные вопросы