gpt4 book ai didi

docker - 如何从 docker run 命令向主管传递环境变量

转载 作者:行者123 更新时间:2023-12-01 15:50:03 25 4
gpt4 key购买 nike

我正在尝试从 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: `.'

环境变量似乎不在上下文中。

最佳答案

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

Note that the subprocess will inherit the environment variables of the shell used to start “supervisord” except for the ones overridden here (environment). See 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 - 如何从 docker run 命令向主管传递环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com