当我使用Docker Stack启动时,我想创建一个符号链接并从docker-compose文件中获取环境文件。像这样:
version: '3'
services:
hello_world:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./config:/config:ro
- ./data:/data
command:
- /bin/bash
- -c
- |
ln -s /config/lala /etc/nginx/lala
source /config/env
nginx -g 'daemon off;'
您可以看到我的命令首先创建了一个符号链接,然后提供了在/ config目录中找到的环境文件,该目录已被卷挂载,然后启动nginx。我知道还有其他方法可以将环境变量放入docker-compose文件中,但是我正在尝试将环境方面与docker-compose文件本身分离。
我正在使用Docker Stack启动它,如下所示:
docker stack deploy -c docker-compose-local.yml nginx-test
但是当我使用以下命令将容器装入容器时
docker exec -it 5c /bin/bash
我可以看到,当我的符号链接正常工作时,我的环境变量未加载:
root@5c562e102cf4:/# env
HOSTNAME=5c562e102cf4
NJS_VERSION=1.15.9.0.2.8-1~stretch
NGINX_VERSION=1.15.9-1~stretch
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
root@5c562e102cf4:/# cat /etc/nginx/lala
asdfadf
root@5c562e102cf4:/# source /config/env
root@5c562e102cf4:/# env
TEST_NGINX_ENV_SETTING=test_setting1
HOSTNAME=5c562e102cf4
NJS_VERSION=1.15.9.0.2.8-1~stretch
TEST_POSTGRES_ENV_SETTING=test_setting2
NGINX_VERSION=1.15.9-1~stretch
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
非常感谢能帮助我从装入的卷中获取此文件或了解为什么我尝试执行的操作可能根本无法工作的人。
答案 0 :(得分:0)
也许您可以尝试在修改后的dockerfile中复制卷的内容,然后通过入口点加载环境变量。
dockerfile将是:
FROM nginx:latest
COPY ./config /config
ENTRYPOINT ["bash", "start.sh"]
start.sh应该是:
# !/bin/bash
source /config/env
nginx -g 'daemon off;'
stack.yml文件为:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./data:/data
注意:您还可以在入口点添加符号链接。