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

时间:2016-02-12 15:16:17

标签: docker openvswitch

我使用socketplane/openvswitch泊坞窗图片。 当我按照他们的指示在正在运行的容器中构建和执行OVS命令时,一切正常。但是,当我尝试构建用于运行和执行OVS命令的bash脚本时,容器将返回

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

由于

1 个答案:

答案 0 :(得分:0)

我的想法是问题的根源在于:

docker run -itd

因为它们是相互矛盾的参数。

  • -d说'在后台跑。
  • -it说'以交互方式运行,附上一个tty。

所以我建议你试试:

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

如果做不到这一点,我的第二个猜测就是 - 容器的启动过程需要一段时间。我在启动kibana个容器时得到了这个 - 它需要几秒钟才能启动,所以我得到'许可被拒绝'的错误。

尝试在那里坚持'睡眠',作为一个简单的测试,但如果这是问题 - 你需要检查数据库启动,看看你到了哪里'。

如果失败,您可以使用docker exec -it <container> bash以交互方式“附加”到容器中并运行命令并直接进行故障排除。