我有一个 Dockerfile,其中包含一些RUN
用于启动 mariadb 服务器以进行数据库导入操作的命令。
问题是podman build
将RUN
命令的网络模式设置为host
默认情况下,它使用主机的网络接口 - 正如我从 podman 的文档中理解的那样 - 所以,当 mariadb 步骤到来时,服务器无法启动,因为有另一个 mariadb 实例正在运行具有相同端口的主机 - 我无法暂时停止。
对我有用的解决方法是在命令中添加--network container
标志,build
但是这样做会阻止其他安装依赖项的步骤访问互联网yum
,我的猜测是为构建步骤创建的网络命名空间没有外部互联网访问.
因此,这有点像死锁,要在我正在构建的映像中安装系统依赖项,我必须使用主机网络,并且要启动使用网络接口的服务,我必须使用无法访问互联网的容器网络 - 只能使用build
但是,当run
使用用户定义的桥接网络 ning 容器时,可以访问互联网。
我目前的解决方法是使用主机网络构建两次,另一个使用容器网络构建 - 第二次build
使用已经安装了外部依赖项的缓存图像 - 因此,在这种情况下,如果我们可以定义哪个步骤会很棒Dockerfile
或Containerfile
使用主机网络并使用桥接网络。
对于这个问题的长时间阐述,我深表歉意,我试图搜索这个特殊案例,但是除了手动构建每组步骤之外找不到任何明确的答案。
PS:我尝试将network
标志设置为我的用户定义的网络,该网络在运行容器时工作,但不受支持 - 或者我不确定如何使用build
.