docker-compose.yml中入口点中env fiile中的环境变量

docker-compose.yml中入口点中env fiile中的环境变量,docker,environment-variables,docker-compose,entry-point,Docker,Environment Variables,Docker Compose,Entry Point,我想在docker compose的入口点中使用env文件中的变量: # environment.env HOST=example.com # docker-compose.yml some_service: ... env_file: ['environment.env'] entrypoint: ['myexecutable', '--host', '$HOST'] 有办法吗?我只找到了一个解决方案: # docker-compose.yml

我想在docker compose的入口点中使用env文件中的变量:

  # 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的概念“每个容器一个进程”(因为将有两个进程:
sh
myexecutable
)。容器不能正常停止,我必须用
docker kill
docker compose kill
杀死它,我不确定env文件,但是如果它已经是shell会话中的环境变量,您可以在docker compose文件中用
${your_env_var_here}使用它

如果只想拥有一个进程,可以运行
sh-c“exec myexecutable--host…”
,这样它就可以作为单个进程接管。虽然“每个容器一个进程”通常意味着您不运行进程管理器。一个过程启动另一个过程并不罕见


要在SIGTERM上正确退出命令,需要设置显式信号处理程序。您可以使用bash中的
trap
或应用程序本身来实现这一点。另请参见

问题完全是关于env文件的,因为它存储了服务的配置…Entrypoint
exec myexecutable
对我不起作用:它表示未找到或不存在
容器命令。
;根据docker的理念,entrypoint
sh-c'exec myexecutable--host$$host'
将是正确的解决方案吗?对不起,我是说
sh-c'exec…'