在容器内创建容器会引发错误"docker: not found"



我正在自动化从简单的ML模型创建Docker映像的过程。 到目前为止,我从一个烧瓶中成功地完成了它,我是哪个调用在 Linux 中运行 并具有从模型创建新容器的模板。

现在下一步如果要容器化此API,我尝试仅创建容器并
调用API,但出现此错误:

"docker: not found" 

所以基本上,docker 容器没有安装 docker,因此我无法从那里创建新映像。

我想在那里安装 Docker 并找到一些资源来做到这一点:https://github.com/jpetazzo/dind 但长话短说:这是一个坏主意。

从另一个博客中,我发现了这个:http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

"你真的想要Docker-in-Docker吗?或者你只是希望能够从你的CI系统运行Docker(特别是:构建,运行,有时推送容器和镜像(,而这个CI系统本身在一个容器中?

这似乎是我在这里问题的解决方案,博客建议使用卷标志来暴露套接字:

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

我做到了:

sudo docker run  -v /var/run/docker.sock:/var/run/docker.sock  -d -p 5100:5100 my_container:latest

但是在那之后我遇到了完全相同的错误:"docker:未找到"。

最好使用官方的Dockerdind,而不是将其用作去年未更新的jpetazzo/dind。

启动守护程序实例

$ docker run --privileged --name some-docker -d 
--network some-network --network-alias docker 
-e DOCKER_TLS_CERTDIR=/certs 
-v some-docker-certs-ca:/certs/ca 
-v some-docker-certs-client:/certs/client 
docker:dind

如果您有兴趣添加一些自己的二进制文件,那么

From docker:dind
# add here and create your own image

红绿灯

从 18.09+ 开始,此图像的 dind 变体将自动 在指定的目录中生成 TLS 证书 DOCKER_TLS_CERTDIR环境变量。

您可以在此处进一步阅读有关官方图像的更多信息

数据存储:

Docker 文档是理解的良好起点 不同的存储选项和变体,并且有多个 博客和论坛帖子,讨论并在此领域提供建议。我们 将在此处仅显示上述后一个选项的基本过程:

在主机系统上合适的卷上创建一个数据目录,例如/my/own/var-lib-docker。

像这样启动 docker 容器:

$ docker run --privileged --name some-docker -v /my/own/var-lib-docker:/var/lib/docker -d docker:dind

该命令的-v /my/own/var-lib-docker:/var/lib/docker部分将底层主机系统中的/my/own/var-lib-docker目录挂载为容器内的/var/lib/docker,默认情况下,Docker 将在其中写入其数据文件。

最新更新