【问题标题】:How to pass supervisor an environment variable from the docker run command如何从 docker run 命令向主管传递环境变量
【发布时间】:2014-11-04 20:53:26
【问题描述】:

我正在尝试从 docker run 命令向主管传递一个变量,以便它可以执行具有变量值的脚本。我们需要在运行时设置它,这样每个开发人员都可以在 rabbitmq 中拥有自己的队列,这样我们就不会在测试期间破坏彼此的队列。

Docker 运行命令:

  docker run -i -p 5672:5672 -p 9200:9200 -p 9300:9300 -p 9001:9001 -p 15672:15672 -e "PARENT_HOSTNAME=MACHINED58" --rm --name shovel  -t dtwill/blkmesa:shovel

docker CMD 语句(查看文档后我知道为什么会发生错误无法提供任意参数http://supervisord.org/running.html):

  CMD /usr/bin/supervisord

主管配置:

  [program:update_rabbit_config]
  command=/src/update_rabbit_config.sh
  redirect_stderr=true
  priority=200
  startsecs=3

脚本主管运行:

  machineName=$PARENT_HOSTNAME
  echo machine name = $machineName
  sed -i .bak "s/|machine|/'$machineName'/" /etc/rabbitmq/rabbitmq.config

这是错误:

 INFO exited: update_rabbit_config (exit status 1; not expected)

...所以如果有人知道如何做到这一点,我将不胜感激,当我开悟时会跳一支快乐的舞蹈。

谢谢!

[更新] 我更新了相关部分以使用答案中的建议。当我手动运行脚本时(在使用 nsenter 连接到正在运行的容器之后),我还包括了脚本的结果:

  root@1e2aeaa3dfb8:/src# bash update_rabbit_config.sh 
  machine name =
  sed: -e expression #1, char 1: unknown command: `.'

看起来环境变量不在上下文中。

【问题讨论】:

    标签: docker rabbitmq supervisord


    【解决方案1】:

    我不是主管专家,但在documentation 中说:

    请注意,子进程将继承用于启动“supervisord”的 shell 的环境变量,但此处覆盖的那些 (environment) 除外。见Subprocess Environment

    据我了解,您应该从主管配置中删除 environment=PARENT_HOSTNAME=%(PARENT_HOSTNAME)s


    您的sed 命令也存在问题。因为您使用了单引号 ' 变量替换不会发生。试试吧:

    echo machine name = $PARENT_HOSTNAME
    sed -i .bak "s/|machine|/$PARENT_HOSTNAME/" /etc/rabbitmq/rabbitmq.config
    

    【讨论】:

    • 是的,docker run 中的 -e 设置环境变量。只需使用它们。
    • 谢谢@Thomasleveil。我试过了,但是当该子进程运行时我仍然收到错误。
    • 您是否从CMD /usr/bin/supervisord $PARENT_HOSTNAME 中删除了$PARENT_HOSTNAME?您需要这样做,因为 PARENT_HOSTNAME 将从环境变量中读取,而不是从 supervisord 参数中读取。
    • +Thomasleveil 是的,先生。它看起来像上面的代码。我从 docker 文件和主管配置中删除了它。
    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2018-10-16
    • 1970-01-01
    • 2021-04-17
    • 2015-09-21
    • 2016-09-08
    相关资源
    最近更新 更多