Создание образа докера внутри контейнера alpine linux

Мы используем docker-контейнеры под управлением alpine linux в качестве агентов сборки в bamboo. В рамках плана сборки необходимо создать образ докера.

У нашего агента сборки установлен докер, однако мы получаем ошибки, так как демон докера не запущен. Запуск демона с

/usr/local/bin/dockerd

дает следующее:

INFO[0000] libcontainerd: new containerd process, pid: 640 
ERRO[0001] 'overlay' is not supported over overlayfs    
INFO[0001] Graph migration to content-addressability took 0.00 seconds 
INFO[0001] Loading containers: start.                   
WARN[0001] Running modprobe bridge br_netfilter failed with message: modprobe: can't change directory to '/lib/modules': No such file or directory
, error: exit status 1 
WARN[0001] Running modprobe nf_nat failed with message: `modprobe: can't change directory to '/lib/modules': No such file or directory`, error: exit status 1 
WARN[0001] Running modprobe xt_conntrack failed with message: `modprobe: can't change directory to '/lib/modules': No such file or directory`, error: exit status 1 
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain: Iptables not found

Чтобы попытаться обойти это, я установил iptables. Теперь, когда я пытаюсь запустить демон докера, я получаю:

INFO[0000] libcontainerd: new containerd process, pid: 705 
ERRO[0001] 'overlay' is not supported over overlayfs    
INFO[0001] Graph migration to content-addressability took 0.00 seconds 
INFO[0001] Loading containers: start.                   
WARN[0001] Running modprobe bridge br_netfilter failed with message: modprobe: can't change directory to '/lib/modules': No such file or directory
, error: exit status 1 
WARN[0001] Running modprobe nf_nat failed with message: `modprobe: can't change directory to '/lib/modules': No such file or directory`, error: exit status 1 
WARN[0001] Running modprobe xt_conntrack failed with message: `modprobe: can't change directory to '/lib/modules': No such file or directory`, error: exit status 1 
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain: iptables failed: iptables -t nat -N DOCKER: iptables v1.6.0: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
 (exit status 3)

Я немного застрял в том, куда идти, потому что sudo - это не вещь для alpine.


person thewire247    schedule 16.02.2017    source источник


Ответы (1)


Запуск демона Docker внутри контейнера Docker - вообще изворотливая перспектива. У нас есть то же самое требование, и мы решаем его, монтируя /var/run/docker.sock с хоста Docker в контейнер Docker:

docker run -v /var/run/docker.sock:/var/run/docker.sock --privileged

Таким образом, команда docker внутри контейнера агента сборки фактически обращается к демону Docker на хосте, а не внутри контейнера. У нас действительно хорошо работает.

person Scott Rankin    schedule 23.02.2017
comment
спасибо, пошел с этой опцией. Хотя мне не приходилось работать с --privileged - person thewire247; 24.02.2017
comment
Вот статья, в которой описаны плюсы и минусы использования docker-in-docker. Он также дает некоторое представление о решении, описанном выше: jpetazzo.github.io/2015/09/03/ - person André Gasser; 26.02.2020