生成映像时无法运行docker

生成映像时无法运行docker,docker,Docker,我试图安装一个软件与Docker同时建立一个形象,我得到了 docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'. 我用过的Dockerfile FROM ubuntu:xenial # Install docker pre-reqs RUN apt-get update -qq &a

我试图安装一个软件与Docker同时建立一个形象,我得到了

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. 
Is the docker daemon running?.
See 'docker run --help'.
我用过的Dockerfile

FROM ubuntu:xenial

# Install docker pre-reqs
RUN apt-get update -qq && apt-get install -qqy \
    apt-transport-https \
    ca-certificates \
    curl \
    lxc \
    iptables \
    dmsetup \
  && apt-get clean && apt-get autoclean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/* ~/.cache

# Install Docker from Docker Inc. repositories
RUN curl -sSL https://get.docker.com/ | sh

# Install the Helm package manager by running a docker command
RUN docker run --rm --net=host -v /var/lib:/data helm-api:1.0.0 cp /usr/src/app/public/cli/linux-amd64/helm /data

CMD ["/bin/bash"]

有没有办法在docker文件中运行docker命令来创建映像?

您的问题不在于docker命令,正如错误消息中所说,您的docker守护程序没有运行,或者由于某些配置问题,您无法连接到它

你刚刚安装了Docker吗?你完成了所有的步骤了吗

您可以使用
docker run hello world
sudo docker run hello world

如果它仅适用于sudo,那是因为您没有为用户配置docker,请参阅:

有没有办法在Dockerfile中运行docker命令来创建图像

不可以。不能从Docker文件中运行Docker命令

通常的方法是与容器共享主机的Docker套接字,但在映像构建过程中不能装载任何卷或主机目录。原则上,您可以在主Docker容器中运行辅助Docker(尽管这是不鼓励的、复杂的和脆弱的),但同样,由于您无法在Dockerfile中真正启动服务,因此这将不起作用


考虑到您试图在映像中安装的各种东西,看起来您正在寻找某种可以直接在主机上运行的系统级自动化工具,而不是希望在受限容器环境中运行的工具。Ansible、Salt Stack和Chef都是这一领域的热门选项。

遇到了类似的挑战,我认为这些选项是:

  • 您可以将DOCKER文件中的DOCKER_HOST环境变量设置为DOCKER容器外部可用的ip或主机。这仍然不是一个完美的想法,因为该主机基本上必须与docker主机分开使用。如果您的企业中有一个共享的dockerhost,每个人都可以使用它,那么它可能很好,但是您正在创建一个有点复杂的构建系统

  • 创建一个单独的shell脚本,在docker容器构建外部运行docker命令。然后在docker构建期间复制该步骤创建的工件。不是很好,因为它不是100%docker,但仍然工作良好,便于携带

  • 在执行生成之前,将sed与dockerfile.template一起使用,将另一个dockerfile的内容注入到您自己的dockerfile中。与选项2类似,这仍然需要预构建步骤,如果在两个DockerFile中没有使用相同的操作系统,也可能会遇到兼容性问题


  • 考虑到这3个选项,选项2似乎是最好的一个

    您好,我相信Docker是通过
    runcurl-sSL这一行安装的https://get.docker.com/ |sh
    据我所知,它不会将您当前的用户添加到docker组,您可以尝试使用sudo再次运行吗
    sudo docker运行hello world
    或尝试hello world。正如您所说,我错过了一些步骤。我以后会设法弄清楚的。谢谢你指出这一点。