如何运行docker:dind以shell开头

时间:2019-01-11 10:27:06

标签: docker dockerfile

我想运行docker:dind并获得一个外壳。
如果我运行docker run --privileged docker:dind sh,它将退出。
解决方法是运行:docker run -d --privileged docker:dind
它从后台开始,然后我可以运行docker exec -it <container> sh并获取一个shell。

但是我希望它以外壳开头。
我创建了一个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?.  

任何想法如何使docker:dind从shell开始,而没有变通方法是在后台运行它,然后使用exec获取shell。

2 个答案:

答案 0 :(得分:2)

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

FROM docker:dind
CMD ["sh"]

,以及是否要使用Dockerfile。就是这样写。

ENTRYPOINT

它不应覆盖docker:dind。您可以尝试检查docker inspect docker:dind 图像。

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

您会看到入口点是一个shell脚本文件。

docker run -it docker:dind sh

当然,我们可以在容器中找到此文件。进入docker

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

然后

like argument.some_feature

有关您可以看到的入口点的更多信息

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

答案 1 :(得分:1)

您需要告诉docker运行 interactive 并使用 tty 才能使用外壳程序。

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

或者简称

docker run -it docker:dind sh
相关问题