我想在入口点使用docker-compose中的env-file变量:
# 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概念“每个容器一个进程”(因为将有2个进程:sh
和myexecutable
)。并且容器没有正常停止,我必须使用docker kill
或docker-compose kill
来杀死它。
答案 0 :(得分:1)
如果您只想拥有一个流程,则可以运行sh -c 'exec myexecutable --host ...'
,以便它将作为单个流程接管。虽然“每个容器一个进程”通常意味着您不运行进程主管。一个进程启动其他进程并不罕见。
要在SIGTERM上正确退出命令,您需要设置显式信号处理程序。您可以使用bash中的trap
或应用程序本身来执行此操作。另请参阅https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop
答案 1 :(得分:0)
我不确定env文件,但如果它是shell会话中已有的环境变量,则可以在docker-compose文件中使用{{1}}