5

我有两个服务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

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

4

1 回答 1

4

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

于 2015-05-05T12:03:02.403 回答