构建映像时无法运行docker

时间:2018-08-16 16:08:44

标签: 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 && 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 -e LICENSE=accept --net=host -v /var/lib:/data ibmcom/icp-helm-api:1.0.0 cp /usr/src/app/public/cli/linux-amd64/helm /data

CMD ["/bin/bash"]

是否可以在Dockerfile中运行docker命令来创建映像?

3 个答案:

答案 0 :(得分:1)

您的问题不在于Docker命令,因为它在错误消息中指出您的Docker守护程序未运行,或者由于某些配置问题而无法连接到它。

您刚刚安装了Docker吗?您是否已完成Installation Guide中的所有步骤?

您可以使用docker run hello-worldsudo docker run hello-world

测试docker安装

如果它仅与sudo一起使用,那是因为您没有为用户配置docker,请参阅:https://docs.docker.com/install/linux/linux-postinstall/

答案 1 :(得分:0)

  

是否可以在Dockerfile中运行docker命令来创建映像?

不。您无法从Dockerfile内部运行Docker命令。

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

鉴于您要在映像中安装的各种内容,看起来您正在寻找某种可以直接在主机上运行的系统级自动化工具,而不是想要在主机中运行的某种工具受限的容器环境。 Ansible,Salt Stack和Chef是该空间中的热门选项。

答案 2 :(得分:0)

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

  1. 您可以将dockerfile中的DOCKER_HOST环境变量设置为docker容器外部可用的ip或主机。这仍然不是一个完美的主意,因为该主机基本上必须与Docker主机分开可用。如果您在企业中拥有一个共享的dockerhost,每个人都可以使用它,那可能很好,但是否则,您将创建一个稍微复杂的构建系统。

  2. 创建一个单独的shell脚本,以在docker容器构建外部运行docker命令。然后在您的Docker构建期间复制该步骤创建的工件。不太好,因为它不是100%码头工人,但仍然可以正常工作并且可移植。

  3. 在构建之前,将sed与dockerfile.template一起使用将另一个dockerfile的内容注入到您自己的dockerfile中。像选项2一样,这仍然需要一个预构建步骤,并且如果您在两个dockerfile中都没有使用相同的操作系统,那么也可能会遇到兼容性问题。

鉴于这3个选项,选项2似乎是最好的。