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

如何运行docker:dind从shell开始

  •  0
  • E235  · 技术社区  · 5 年前

    我想跑 docker:dind 去拿个贝壳。
    如果我跑 docker run --privileged docker:dind sh 它刚刚出口。
    解决方法是运行: docker run -d --privileged docker:dind
    它从后台开始,然后我可以运行 docker exec -it <container> sh 去拿个贝壳。

    但我希望它从一个外壳开始。
    我创建了一个dockerfile:

    FROM docker:dind
    ENTRYPOINT sh  
    

    我建造了它:
    docker build -t dind2 -f Dockerfile .

    当我奔跑 docker run --rm -it --privileged dind2 我得到一个外壳,但当我试图运行简单的容器时 docker run busybox echo hi 失败了:

    docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.  
    

    知道怎么做吗 码头工人 从shell开始,不需要在后台运行它,然后使用 exec 得到一个外壳。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Andreas Wederbrand    5 年前

    你得叫Docker跑 互动式 和一个 TTY 能够使用外壳。

    docker run --interactive --tty docker:dind sh
    

    或者,简称

    docker run -it docker:dind sh
    
        2
  •  1
  •   RicoChen    5 年前

    就像安德烈亚斯韦德布兰德说的。你可以

    docker run -it docker:dind sh
    

    如果你想使用dockerfile。就这样写吧。

    FROM docker:dind
    CMD ["sh"]
    

    它不应该覆盖 ENTRYPOINT . 你可以试着检查 docker:dind 图像。

    docker inspect docker:dind
    

    可以看到入口点是一个shell脚本文件。

    "Entrypoint": [
      "dockerd-entrypoint.sh"
       ],
    

    当然,我们可以在容器中找到这个文件。进入码头

    docker run-it docker:丁德·什
    

    然后

    cat /usr/local/bin/dockerd-entrypoint.sh
    

    关于入口点的更多信息

    https://medium.freecodecamp.org/docker-entrypoint-cmd-dockerfile-best-practices-abc591c30e21