我正在尝试从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语句(查看文档后,我知道为什么会发生错误,无法提供任意parm 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: `.'
看起来环境变量不在上下文中.
最佳答案
我不是主管的专家,但在documentation中说:
原文链接:https://www.f2er.com/docker/532545.htmlNote that the subprocess will inherit the environment variables of the shell used to start “supervisord” except for the ones overridden here (
environment
). See 07001.
据我了解,您应该从超级用户配置中删除environment = PARENT_HOSTNAME =%(PARENT_HOSTNAME)s.
sed命令也存在问题.因为您使用了单引号,所以不会发生变量替换.请尝试:
echo machine name = $PARENT_HOSTNAME
sed -i .bak "s/|machine|/$PARENT_HOSTNAME/" /etc/rabbitmq/rabbitmq.config