如何从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