如何从docker run命令通过主pipe环境variables

我试图从docker运行命令通过监督员varibale,所以它可以执行一个脚本与variables值。 我们需要在运行时进行设置,以便每个开发人员都可以在rabbitmq中拥有自己的队列,这样在testing过程中我们不会破坏其他队列。

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 

dockerCMD声明(在看文档后,我知道为什么错误发生不能提供一个arbritrary帕姆http://supervisord.org/running.html ):

  CMD /usr/bin/supervisord 

主pipeconfiguration:

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

脚本主pipe运行:

  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) 

…所以如果有人知道如何做到这一点,我会很感激,当我开悟的时候会做一个快乐的舞蹈。

谢谢!

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

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

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

我不是一个主pipe专家,但在文档中说:

请注意,subprocess将inheritance用于启动“supervisord”的shell的环境variables,除了这里覆盖的( environment )。 请参阅子stream程环境 。

根据我的理解,您应该从supervisor config中删除environment=PARENT_HOSTNAME=%(PARENT_HOSTNAME)s


你的sed命令也有问题。 因为你使用单引号'variablesreplace不会发生。 改为:

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