我想运行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。
答案 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