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

我正在尝试从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中说:

Note 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

相关文章

文章浏览阅读8.8k次,点赞2次,收藏7次。本文介绍Docker Com...
文章浏览阅读1.5w次,点赞7次,收藏76次。原网提供的教程需要...
文章浏览阅读940次,点赞20次,收藏20次。通过 docker run 命...
文章浏览阅读1k次,点赞20次,收藏20次。Podman 是一个开源的...
文章浏览阅读2.1k次。请注意,这些命令需要在 Docker 主机上...
文章浏览阅读1.1k次,点赞37次,收藏40次。nacos搭建集群连接...