0

我使用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

谢谢

4

1 回答 1

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

于 2016-02-12T15:32:42.930 回答