2016-02-12 185 views
0

从bash脚本运行docker命令有不同的结果

我使用socketplane/openvswitch泊坞窗图像。 当我按照他们的指示在正在运行的容器中构建和执行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 

感谢

+0

如果没有更多的细节,我们无法回答。至少要参考您所遵循的导致问题的指示。以及你正在运行那个错误的一系列命令。 – Sobrique

+0

[问]对于提出一个好问题是一个有用的参考点。想象一下,我试图在我的系统上重现您的错误。我需要做什么? – Sobrique

+0

对不起,修改了 – Daniel

回答

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并运行命令,并直接排除故障。

+0

这个问题'sleep 3'做了这个工作。谢谢!你可能会发现有您可以检查日志条目 - – Daniel

+0

下一步可能会找出你怎么能“检测”打开的端口(我也是从“-itd”如你所说删除“它”)。 – Sobrique

+0

感谢您提供非常有帮助的建议。 – Daniel