#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 довольно сложный. Если вам это действительно нужно, подумайте о том, чтобы запустить его как отдельный контейнер рядом с вашим контейнером приложения.