docker 并设置连接

docker 并设置连接

我从公共仓库拉取了一个容器,我想安装一个包到其中。但没有成功...有什么帮助吗?如何设置 docker 与包存储库的连接?

[root@adf2 adf2_umb_docker]# docker ps -l

容器 ID 图像 命令 创建状态 端口 名称

8a9a015c5301 devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi18.4 “bash” 8 分钟前 已关注 8 分钟 admiring_shirley

[root@adf2 adf2_umb_docker]# docker 运行 devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi18.4 bash -c "apt-get -y install vim"

正在读取包裹清单...

正在构建依赖关系树...

正在读取状态信息...

E: 无法找到软件包 vim

管理员通知了我有关防火墙的此日志:

8 月 23 日 23:02:08 adf2firewalld[5882]: 警告:COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -C OUTPUT -m addrtype --dst-type LOCAL -j DOCKER !--dst 127.0.0.0/8' 失败:iptables:没有该名称的链/目标/匹配。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER' 失败:iptables:没有该名称的链/目标/匹配。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-ISOLATION' 失败:iptables:没有该名称的链/目标/匹配。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t nat -C POSTROUTING -s 192.168.0.0/20!-o docker0 -j MASQUERADE' 失败:iptables:没有该名称的链/目标/匹配。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t nat -C DOCKER -i docker0 -j RETURN' 失败:iptables:错误规则(该链中是否存在匹配的规则?)。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -D FORWARD -i docker0 -o docker0 -j DROP' 失败:iptables:错误规则(该链中是否存在匹配的规则?)。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 -o docker0 -j ACCEPT' 失败:iptables:错误规则(该链中是否存在匹配的规则?)。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 !-o docker0 -j ACCEPT' 失败:iptables:错误规则(该链中是否存在匹配的规则?)。

8 月 23 日 23:02:08 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT' 失败:iptables:错误规则(该链中是否存在匹配的规则?)。

8 月 23 日 23:02:09 adf2firewalld[5882]:警告:COMMAND_FAILED:'/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER' 失败:iptables:没有该名称的链/目标/匹配。

答案1

这不是在 Docker 中添加包的方法。使用您的方法,让容器实例向其自身添加包。这会使容器尝试访问互联网,而这可能被当地规则禁止。这也会带来未来的问题:

  • 如何备份此容器
  • 必要时如何重建

正确的方法是使用 Dockerfile 导出镜像

FROM devcafe/cmake-cookbook_circleci_ubuntu16.04-pgi/18.4
RUN apt-get -y install vim

然后使用以下命令创建图像:

docker build -t "TheDerivedImageName" $TheDirectpryWithTheDockerfFile

必要时,通过从中创建容器实例来运行映像:

docker run TheDerivedImageName

Dockerfile 和相关文件是主机文件:它们可以被备份、放入源代码控制系统(git……)、与其他人共享……

此外,在 docker 镜像中安装 Vim 是不必要的,并且暗示你可能没有正确使用 Docker。如果你需要在容器中创建/编辑文件,你可以:

  • COPY在构建时使用Dockerfile 中的语句将它们放入镜像中
  • 使用“绑定安装”并从主机上编辑它们。

相关内容