在 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
.
中删除第一个字符
我的 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
.