Я устанавливаю 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 запускается с ограниченным набором разрешений. Даже если вы используете 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 ...
Это будет работать, пока единственная «особая» привилегия, необходимая контейнеру, - это настройка сети.
Re: комментарий @ user3423536, см. "Используете Docker-in-Docker для вашего CI или среды тестирования? Подумать дважды."
Допустим, вы не можете установить Docker внутри образа Docker; это почти наверняка неправильное решение, оно сложно само по себе, Docker не одобряет его и приводит к путанице в отношении того, с каким Docker вы на самом деле разговариваете. Какова ваша цель на более высоком уровне? Обычные ответы - «использовать Docker хоста» или «использовать виртуальную машину».