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

running docker commands from a bash script has different results

我使用 socketplane/openvswitch docker 图片。 当我按照他们的说明在 运行 容器中构建和执行 OVS 命令时,一切正常。但是,当我尝试为 运行 构建 bash 脚本并执行 OVS 命令时,容器 returns 和

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 在后台显示“运行”。
  • -it 交互说'运行,附加一个 tty。

所以我建议你试试:

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

否则,我的第二个猜测是 - 容器的启动过程需要一点时间。我在启动 kibana 个容器时得到这个 - 启动需要几秒钟,所以我得到 'permission denied' 个错误。

尝试在其中插入 'sleep',作为一个简单的测试,但如果这是问题所在 - 您需要检查数据库启动并查看 'got to' 的位置。

否则,您可以使用 docker exec -it <container> bash 和 运行 命令以交互方式 "attach" 到您的容器并直接进行故障排除。