【问题标题】:Use environment vars of container in command key of docker-compose在 docker-compose 的命令键中使用容器的环境变量
【发布时间】:2015-04-24 13:33:16
【问题描述】:

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

当我将 docker-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

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

【问题讨论】:

  • env 变量是否没有被解析而只是作为字符串传递?尝试取消双引号并回发消息。
  • 感谢您的回复。如果我删除双引号,我会收到相同的消息。 ${NGINX_NAME} 也是如此
  • 我认为环境变量没有被替换,因为 docker-gen 的入口点是/usr/local/bin/docker-gen 而不是/bin/sh -c。它根本不知道如何处理变量。

标签: nginx docker docker-compose


【解决方案1】:

我已将 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 中删除第一个字符。

【讨论】:

  • 非常感谢。你让我走上正轨。我完全错过了“无法重新启动 nginx”的消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2022-11-17
  • 2015-09-21
  • 2020-10-26
  • 1970-01-01
  • 2022-10-15
相关资源
最近更新 更多