在 ubuntu 容器内运行 docker

Ale*_*hin 9 ubuntu docker

两天我尝试在 ubuntu 容器内运行 docker:

  1. docker run -it ubuntu bash
  2. 按照https://docs.docker.com/engine/install/ubuntu/或/和https://phoenixnap.com/kb/how-to-install-docker-on-ubuntu-18-04的指令安装 docker
  3. 最后我安装了docker:
root@e65411d2b70a:/# docker -v
Docker version 19.03.6, build 369ce74a3c
Run Code Online (Sandbox Code Playgroud)
  1. 但是当我尝试运行时docker run hello-world遇到了一些问题
root@5ac21097b6f6:/# docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
Run Code Online (Sandbox Code Playgroud)

在服务列表中而不是 docker 中:

root@5ac21097b6f6:/# service docker start
docker: unrecognized service
root@5ac21097b6f6:/# service  --status-all
 [ - ]  apparmor
 [ + ]  cgroupfs-mount
 [ - ]  dbus
 [ ? ]  hwclock.sh
 [ - ]  procps
 [ ? ]  ubuntu-fan
Run Code Online (Sandbox Code Playgroud)

当尝试运行时dockerd

root@5ac21097b6f6:/# dockerd    
INFO[2020-04-23T07:01:11.622627006Z] Starting up                                  
INFO[2020-04-23T07:01:11.624389266Z] libcontainerd: started new containerd process  pid=154
INFO[2020-04-23T07:01:11.624460438Z] parsed scheme: "unix"                         module=grpc
INFO[2020-04-23T07:01:11.624477203Z] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2020-04-23T07:01:11.624532871Z] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock 0  <nil>}] <nil>}  module=grpc
INFO[2020-04-23T07:01:11.624560679Z] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2020-04-23T07:01:11.664827037Z] starting containerd                           revision= version="1.3.3-0ubuntu1~18.04.2"
ERRO[2020-04-23T07:01:11.664943052Z] failed to change OOM score to -500            error="write /proc/154/oom_score_adj: permission denied"
...
INFO[2020-04-23T07:01:11.816951247Z] stopping event stream following graceful shutdown  error="context canceled" module=libcontainerd namespace=plugins.moby
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.6.1: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
 (exit status 3)
Run Code Online (Sandbox Code Playgroud)

不明白为什么Permission denied如果用户root

安装sudo并添加root到组,但没有帮助。

apt-get install sudo
usermod -a -G sudo root
Run Code Online (Sandbox Code Playgroud)

-sudo dockerd有保存问题。

如何让docker在ubuntu容器内工作?你有想法吗?

附:我了解 docker-in-docker,我需要 ubuntu-container 中的 docker

诗篇。我知道-v /var/run/docker.sock:/var/run/docker.sock- 但需要独立的 ubuntu-container 内的 docker 服务。

Dan*_*nyB 7

在docker中运行docker时,容器必须使用你主机上的docker引擎。

这是一个简单的工作设置:

1) 创建一个安装了 docker CLI 的 dockerfile。我使用的是官方 compose 镜像,所以你也有 docker-compose

FROM docker/compose:1.25.5
WORKDIR /app
ENTRYPOINT ["/bin/sh"]
Run Code Online (Sandbox Code Playgroud)

2)运行时,挂载docker sock

$ docker build -t dind .
$ docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock dind
Run Code Online (Sandbox Code Playgroud)

在容器内形成,你现在有了 docker。尝试跑步docker ps