【问题标题】:Environment variables from env fiile in entrypoint in docker-compose.ymldocker-compose.yml 入口点中 env 文件中的环境变量
【发布时间】:2016-07-07 14:52:07
【问题描述】:

我想在入口点的 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 个进程:shmyexecutable)。并且容器不能正常停止,我必须用docker killdocker-compose kill 杀死它。

【问题讨论】:

    标签: docker environment-variables docker-compose entry-point


    【解决方案1】:

    我不确定 env 文件,但如果它是你的 shell 会话中已经存在的环境变量,你可以在 docker-compose 文件中使用它,${your_env_var_here}

    【讨论】:

    • 问题完全是关于 env-file,因为它存储了服务的配置......
    【解决方案2】:

    如果您只想拥有一个进程,您可以运行 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

    【讨论】:

    • Entrypoint exec myexecutable 对我不起作用:它说 Container command not found or does not exist.;根据 docker 哲学,入口点sh -c 'exec myexecutable --host $$HOST' 会是正确的解决方案吗?
    • 对不起,我的意思是sh -c 'exec ...'
    猜你喜欢
    • 2018-08-12
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2018-02-11
    • 2016-12-07
    相关资源
    最近更新 更多