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个进程:shmyexecutable)。而且容器没有正常停止,我必须用 docker killdocker-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