docker-compose.yml 入口点中 env 文件的环境变量
Environment variables from env fiile in entrypoint in docker-compose.yml
我想在入口点 docker-compose 中使用环境文件中的变量:
# environment.env
HOST=example.com
# docker-compose.yml
some_service:
...
env_file: ['environment.env']
entrypoint: ['myexecutable', '--host', '$HOST']
有什么办法吗?我只找到一个解决方案:
# docker-compose.yml
some_service:
...
env_file: ['environment.env']
entrypoint: sh -c 'myexecutable --host $$HOST'
但是看起来违背了docker的概念"one process per container"(因为会有2个进程:sh
和myexecutable
)。而且容器没有正常停止,我必须用 docker kill
或 docker-compose kill
.
杀死它
我不确定 env 文件,但如果它是您的 shell 会话中已经存在的环境变量,您可以在 docker-compose 文件中使用它 ${your_env_var_here}
如果您只想拥有一个进程,您可以 运行 sh -c 'exec myexecutable --host ...'
这样它将作为一个进程接管。尽管 "one process per container" 通常意味着您不是 运行 流程主管。一个进程启动其他进程的情况并不少见。
要在 SIGTERM 上正确退出命令,您需要设置显式信号处理程序。您可以在 bash 中使用 trap
或在应用程序本身中执行此操作。另见 https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop
我想在入口点 docker-compose 中使用环境文件中的变量:
# environment.env
HOST=example.com
# docker-compose.yml
some_service:
...
env_file: ['environment.env']
entrypoint: ['myexecutable', '--host', '$HOST']
有什么办法吗?我只找到一个解决方案:
# docker-compose.yml
some_service:
...
env_file: ['environment.env']
entrypoint: sh -c 'myexecutable --host $$HOST'
但是看起来违背了docker的概念"one process per container"(因为会有2个进程:sh
和myexecutable
)。而且容器没有正常停止,我必须用 docker kill
或 docker-compose kill
.
我不确定 env 文件,但如果它是您的 shell 会话中已经存在的环境变量,您可以在 docker-compose 文件中使用它 ${your_env_var_here}
如果您只想拥有一个进程,您可以 运行 sh -c 'exec myexecutable --host ...'
这样它将作为一个进程接管。尽管 "one process per container" 通常意味着您不是 运行 流程主管。一个进程启动其他进程的情况并不少见。
要在 SIGTERM 上正确退出命令,您需要设置显式信号处理程序。您可以在 bash 中使用 trap
或在应用程序本身中执行此操作。另见 https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop