从bash脚本运行docker命令会产生不同的结果

从bash脚本运行docker命令会产生不同的结果,docker,openvswitch,Docker,Openvswitch,我使用docker图像。 当我按照他们的指示在一个运行的容器中构建和执行OVS命令时,一切正常。但是,当我尝试构建一个bash脚本来运行和执行OVS命令时,容器返回 db.sock: Database connection failed (Connection refused) 实际上,问题是在终端中运行以下命令: docker run -itd --cap-add NET_ADMIN [container-name] docker exec $cid ovs-vsctl show 成功,但

我使用docker图像。 当我按照他们的指示在一个运行的容器中构建和执行OVS命令时,一切正常。但是,当我尝试构建一个bash脚本来运行和执行OVS命令时,容器返回

db.sock: Database connection failed (Connection refused)
实际上,问题是在终端中运行以下命令:

docker run -itd --cap-add NET_ADMIN [container-name]
docker exec $cid ovs-vsctl show
成功,但在bash脚本中运行相同的命令不会成功

这是我的bash脚本:

#!/bin/bash
cid=$(docker run -itd --cap-add NET_ADMIN [container-name])
docker exec $cid ovs-vsctl show

谢谢

我认为你的问题的根源在于:

docker run -itd
因为它们是相互矛盾的参数

  • -d
    说“在后台运行”
  • -上面写着“以交互方式运行,连接tty”
    
因此,我建议您尝试:

#!/bin/bash
cid=$(docker run -d --cap-add NET_ADMIN [container-name])
docker exec $cid ovs-vsctl show
如果做不到这一点,我的第二个猜测是——容器的启动过程需要一点时间。我在启动
kibana
containers时会遇到这种情况-启动需要几秒钟,因此会出现“权限被拒绝”错误

作为一个简单的测试,试着在里面加一个“sleep”,但是如果这是个问题,你需要检查DB的启动情况,看看你“必须”在哪里


如果做不到这一点,您可以使用
docker exec-it bash
交互式地“附加”到容器,并直接运行命令和故障排除

没有更多细节,我们无法回答这个问题。至少要参考您正在遵循的导致问题的说明。以及运行该错误的命令(序列)。是提出好问题的有用参考点。想象一下,我试图在我的系统上重现你的错误。我需要做什么?抱歉,修改了“睡眠3”这个问题。谢谢(我还按照您的建议从“-itd”中删除了“it”)下一步可能是找出如何“检测”端口打开-您可能会发现有一个日志条目可以检查。感谢您提供的非常有用的建议。