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

时间:2019-09-13 04:00:38

标签: docker docker-compose

我正在自动从简单的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系统本身仍在一个容器?”

这似乎是解决我的问题的一种方法,博客建议使用volume标志公开套接字:

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:未找到”。

1 个答案:

答案 0 :(得分:1)

最好使用offical Docker dind,而不是将其用作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

TLS

  

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

您可以进一步了解有关官方出价图片here

的更多信息

数据存储:

  

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在默认情况下将在其中写入其数据文件。