在 docker-compose 的命令键中使用容器的环境变量

Use environment vars of container in command key of docker-compose

我的 docker-compose.yml 中有两个服务:docker-gen 和 nginx。 Docker-gen 被 linked 到 nginx。为了让 docker-gen 工作,我必须传递 nginx 容器的实际名称或哈希,以便 docker-gen 可以在更改时重新启动 nginx。

当我linkdocker-gen到nginx时,docker-gen容器中出现了一组环境变量,我最感兴趣的是NGINX_NAME – 这是 nginx 容器的名称。

因此,将 $NGINX_NAME 放入 command 服务领域并让它发挥作用应该很简单。但是当我启动服务时 $NGINX_NAME 并没有扩展。查看 docker-gen 日志,我看到以下行:

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

有没有办法在命令中放置环境变量占位符,以便在容器启动时它可以扩展为实际值?

我已将 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
    "

通过 Docker 链接注入的容器名称以“/”开头,但是当我将 SIGHUP 发送到带有前导斜线的容器时,信号没有到达:

$ docker kill -s SIGHUP /myproject_dockergen_1/nginx

如果我删除它,nginx 会按预期重新启动。所以这个 $(echo $NGINX_NAME | tail -c +2) 部分是为了从 $NGINX_NAME.

中删除第一个字符