Запустите docker внутри контейнера Ubuntu - PullRequest
0 голосов
/ 23 апреля 2020

2 дня Я пытаюсь запустить docker внутри контейнера Ubuntu:

  1. docker run -it ubuntu bash
  2. Установить docker по инструкции https://docs.docker.com/engine/install/ubuntu/ или / и https://phoenixnap.com/kb/how-to-install-docker-on-ubuntu-18-04
  3. Наконец-то я установил docker:
root@e65411d2b70a:/# docker -v
Docker version 19.03.6, build 369ce74a3c
Но когда я пытаюсь запустить 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'.

В списке служб нет docker:

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

При попытке запустить 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)

Не понимаю, почему Permission denied, если пользователь root.

Установите sudo и добавьте root в группу, но это не поможет.

apt-get install sudo
usermod -a -G sudo root

- sudo dockerd есть проблема с сохранением.

Как заставить работать docker внутри контейнера Ubuntu? У вас есть идеи?

пс. Я знаю о docker -in- docker, мне нужно ровно docker внутри Ubuntu-контейнера

pss. Я знаю о -v /var/run/docker.sock:/var/run/docker.sock - но мне нужен независимый сервис docker внутри ubuntu-контейнера.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

При запуске docker в docker контейнер должен использовать механизм docker на вашем хосте.

Вот простая рабочая настройка:

1) Создайте файл Docker с установленным docker CLI. Я использую официальный образ compose, поэтому у вас также есть docker -compose

FROM docker/compose:1.25.5
WORKDIR /app
ENTRYPOINT ["/bin/sh"]

2) При запуске смонтировать форму docker sock

$ docker build -t dind .
$ docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock dind

внутри контейнер, теперь у вас есть docker. Попробуйте запустить docker ps

1 голос
/ 23 апреля 2020

Если вы хотите сделать docker в docker без -v /var/run/docker.sock:/var/run/docker.sock, то я боюсь, что нет хорошего способа сделать это. Совместное использование сокета docker с хоста является классическим c способом заставить docker контейнеры работать в другом docker контейнере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...