在docker-compose.yml的入口点env文件中的环境variables
我想在入口点使用docker-compose中的env-filevariables:
# environment.env HOST=example.com # docker-compose.yml some_service: ... env_file: ['environment.env'] entrypoint: ['myexecutable', '--host', '$HOST']
有没有办法做到这一点? 我发现只有一个解决scheme:
# docker-compose.yml some_service: ... env_file: ['environment.env'] entrypoint: sh -c 'myexecutable --host $$HOST'
但它看起来违反了docker概念“每个容器一个进程”(因为会有2个进程: sh
和myexecutable
)。 而容器不能正常停止,我不得不用docker kill
或docker-compose kill
杀死它。
如果你想只有一个进程,你可以运行sh -c 'exec myexecutable --host ...'
这样它就可以作为单个进程来接pipe。 尽pipe“每个容器一个进程”通常意味着你不运行进程pipe理器。 一个stream程启动其他stream程并不罕见。
要使命令在SIGTERM上正确退出,您需要设置显式的信号处理程序。 你可以用bash或应用程序本身的trap
来做到这一点。 另见https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop
我不确定env文件,但是如果它是一个环境variables已经在你的shell会话中,你可以在${your_env_var_here}
-compose文件中使用它,