Docker容器内的码头工人

pri*_*ank 11 docker dockerfile

我想在一个正在运行的docker容器中安装docker.

docker run -it centos:centos7
Run Code Online (Sandbox Code Playgroud)

我的基础容器正在使用centos,我可以使用登录到正在运行的容器docker exec.但是当我尝试在其中安装docker时使用yum install -y docker它安装.

但不知怎的,我无法启动docker服务docker -d &,它给出了我的错误:

INFO[0000] Option DefaultNetwork: bridge 
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: , error: exit status 1 
FATA[0000] Error starting daemon: Error initializing network controller: Error initializing bridge driver: Setup IP forwarding failed: open /proc/sys/net/ipv4/ip_forward: read-only file system
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以在docker容器中安装docker或者构建已经运行docker的映像?我已经看过这些例子,但没有一个对我有用.

uname -r主机上的输出:

[fedora@ ~]$ uname -r
4.2.6-200.fc22.x86_64
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

提前致谢

ges*_*lix 11

更新

感谢/sf/answers/2661169311/我想展示另一种方法.

docker您应该复制或安装特定于容器的二进制版本,而不是挂载主机的二进制docker文件.由于您仅在客户端模式下使用它,因此您无需将其作为系统服务进行安装.您仍然需要将Docker套接字安装到容器中,以便您可以轻松地与主机的Docker引擎进行通信.

假设你有一个带有工作Docker二进制文件的基本图像(例如官方的docker图像),现在的例子如下:

docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ docker:1.12 docker info


在没有实际回答您的问题的情况下,我建议您阅读使用Docker-in-Docker进行CI或测试环境?三思而后行.

它解释了为什么运行docker-in-docker应该用Docker容器作为"外部"或"基础"容器的兄弟节点运行的设置替换.这篇文章还链接到原始的https://github.com/jpetazzo/dind项目,在那里你可以找到如何在Docker中运行Docker的工作示例 - 以防你仍然希望拥有docker-in-docker.

如何启用容器来访问主机的Docker守护程序的示例如下所示:

docker run\
  -v /var/run/docker.sock:/var/run/docker.sock\
  -v /usr/bin/docker:/usr/bin/docker\
  busybox:latest /usr/bin/docker info
Run Code Online (Sandbox Code Playgroud)


mic*_*ahr 1

你需要--privileged参数。

\n\n
\n

默认情况下,Docker 容器为 \xe2\x80\x9cunprivileged\xe2\x80\x9d,例如,无法在 Docker 容器内运行 Docker 守护进程。

\n
\n\n

来源

\n\n

使用以下命令运行您的基础映像docker run --privileged -it centos:centos7 bash。然后您可以在该容器内安装并运行另一个 docker 容器。

\n