Запуск Docker в контейнере Ubuntu Bionic

Я устанавливаю Docker CE на последний образ Ubuntu Docker и получаю следующую ошибку. Я внимательно следил за инструкциями по установке; может быть, установка Docker в Docker-контейнер - это не выход? Я работаю с Jenkins Pipelines и установил Jenkins в контейнере Ubuntu; следующая часть - запустить Docker.

time = "2018-10-26T13:25:09.920187300Z" level=info msg = "scheme \"unix\" not registered, fallback to default scheme" module=grpc
time = "2018-10-26T13:25:09.920228600Z" level=info msg = "ccResolverWrapper: sending new addresses to cc: [{unix:///var/run/docker/containerd/docker-containerd.sock 0  <nil>}]" module=grpc
time = "2018-10-26T13:25:09.920250500Z" level=info msg = "ClientConn switching balancer to \"pick_first\"" module=grpc
time = "2018-10-26T13:25:09.920286200Z" level=info msg = "pickfirstBalancer: HandleSubConnStateChange: 0xc420047e60, CONNECTING" module=grpc
time = "2018-10-26T13:25:09.920480100Z" level=info msg = "pickfirstBalancer: HandleSubConnStateChange: 0xc420047e60, READY" module=grpc
time = "2018-10-26T13:25:09.920501400Z" level=info msg = "Loading containers: start."
time = "2018-10-26T13:25:09.920666400Z" level=warning msg = "Running modprobe bridge br_netfilter failed with message: , error: exec: \"modprobe\": executable file not found in $PATH"
time = "2018-10-26T13:25:09.920704800Z" level=warning msg = "Running modprobe nf_nat failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
time = "2018-10-26T13:25:09.920733300Z" level=warning msg = "Running modprobe xt_conntrack failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
Error starting 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)

Допустим, вы не можете установить Docker внутри образа Docker; это почти наверняка неправильное решение, оно сложно само по себе, Docker не одобряет его и приводит к путанице в отношении того, с каким Docker вы на самом деле разговариваете. Какова ваша цель на более высоком уровне? Обычные ответы - «использовать Docker хоста» или «использовать виртуальную машину».

David Maze 26.10.2018 16:22
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
1
2 176
1

Ответы 1

Типичный контейнер Docker запускается с ограниченным набором разрешений. Даже если вы используете root в контейнере, вы не можете ни изменить конфигурацию сети, ни смонтировать файловые системы. Итак, ошибка, которую вы видите ...

Error starting 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)

... происходит из-за этого ограничения. Вы можете создать неограниченный контейнер, создав с вашим контейнером:

docker run --privileged ...

Вы мая сможете использовать что-то более детализированное и предоставить возможность NET_ADMIN, например:

docker run --cap-add NET_ADMIN ...

Это будет работать, пока единственная «особая» привилегия, необходимая контейнеру, - это настройка сети.

Другие вопросы по теме