Базовый Docker в образе Docker не может запустить демон Docker

#docker #dockerfile #docker-in-docker

#docker #dockerfile #docker-in-docker

Вопрос:

Я сократил свой dockerfile до следующего

 FROM docker:latest
EXPOSE 3000
 

Но при запуске образа демон docker не может запуститься.

Запуск dockerd в контейнере приводит к большой цепочке информации, ошибок и предупреждений, заканчивающихся следующим:

 WARN[2021-12-09T01:07:36.691842800Z] grpc: addrConn.createTransport failed to connect to {unix:///var/run/docker/containerd/containerd.sock  <nil> 0 <nil>}. Err :connection error: desc = "transport: Error while dialing dial unix:///var/run/docker/containerd/containerd.sock: timeout". Reconnecting...  module=grpc
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: Iptables not found
 

Я что-то упустил? Я могу вручную установить iptables, но затем он снова завершается с

 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.8.7 (legacy): can't initialize iptables table `nat': Permission denied (you must be root)
 

Поэтому я предполагаю, что у меня какие-то неправильные настройки, поскольку, похоже, здесь все работает из коробки https://hub.docker.com/_/docker

Я запускаю docker в Windows с серверной частью WSL 2.

Комментарии:

1. docker:dind Изображение отличается от docker:latest , и оно выполняет много дополнительных настроек . Вам действительно нужно запускать вложенный демон Docker?

2. Да, мне нужно запустить сборку docker в сгенерированном коде для Linux как часть генерации клиента FastAPI.

3. Можете ли вы вместо этого использовать демон Docker хоста; docker run -v /var/run/docker.sock:/var/run/docker.sock ... your-image ? DinD довольно сложный. Если вам это действительно нужно, подумайте о том, чтобы запустить его как отдельный контейнер рядом с вашим контейнером приложения.