代码之家  ›  专栏  ›  技术社区  ›  Tai

生成映像时无法运行docker

  •  1
  • Tai  · 技术社区  · 6 年前

    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"]
    

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

    3 回复  |  直到 5 年前
        1
  •  1
  •   mlameiras    6 年前

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

    Installation Guide ?

    你可以用 docker run hello-world sudo docker run hello-world

    如果它只适用于sudo,那是因为您没有为用户配置docker,请参阅: https://docs.docker.com/install/linux/linux-postinstall/

        2
  •  0
  •   David Maze    6 年前

    不。你不能从Dockerfile内部运行Docker命令。

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

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

        3
  •  0
  •   Josh Woodcock    5 年前

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

    2. 创建一个单独的shell脚本,在docker容器生成外部运行docker命令。然后在docker构建期间复制该步骤创建的工件。不太好,因为它不是100%的码头工人,但仍然工作良好,是便携式的。

    3. 在生成之前,将sed与dockerfile.template一起用于将其他dockerfile的内容注入到您自己的dockerfile中。与选项2一样,这仍然需要一个预构建步骤,如果在两个dockerfile中不使用相同的操作系统,也可能会遇到兼容性问题。