2

我有一个 Dockerfile,其中包含一些RUN用于启动 mariadb 服务器以进行数据库导入操作的命令。

问题是podman buildRUN命令的网络模式设置为host默认情况下,它使用主机的网络接口 - 正如我从 podman 的文档中理解的那样 - 所以,当 mariadb 步骤到来时,服务器无法启动,因为有另一个 mariadb 实例正在运行具有相同端口的主机 - 我无法暂时停止。

对我有用的解决方法是在命令中添加--network container标志,build但是这样做会阻止其他安装依赖项的步骤访问互联网yum,我的猜测是为构建步骤创建的网络命名空间没有外部互联网访问.

因此,这有点像死锁,要在我正在构建的映像中安装系统依赖项,我必须使用主机网络,并且要启动使用网络接口的服务,我必须使用无法访问互联网的容器网络 - 只能使用build但是,当run使用用户定义的桥接网络 ning 容器时,可以访问互联网。

我目前的解决方法是使用主机网络构建两次,另一个使用容器网络构建 - 第二次build使用已经安装了外部依赖项的缓存图像 - 因此,在这种情况下,如果我们可以定义哪个步骤会很棒DockerfileContainerfile使用主机网络并使用桥接网络。

对于这个问题的长时间阐述,我深表歉意,我试图搜索这个特殊案例,但是除了手动构建每组步骤之外找不到任何明确的答案。

PS:我尝试将network标志设置为我的用户定义的网络,该网络在运行容器时工作,但不受支持 - 或者我不确定如何使用build.

4

1 回答 1

1

回复晚了,但我遇到了同样的问题,并且能够通过添加 --network=private 来解决它。

于 2021-06-16T21:04:57.350 回答