作者:docetaxel | 来源:互联网 | 2023-01-29 09:37
所以在开始这个问题之前,我是对码头工作者的理解.
Docker有3个组件
图片
集装箱
Dockerfile
现在Images是创建容器的映像,Dockerfile就像流程一样.简单来说,图像是类,容器是图像的对象.
现在,我不想采用Dockerfile
您在创建容器时指定要执行的步骤的方法.
我想通过Linux安装一些基本实体,如MongoDb,Redis等,并在我们的服务器上运行.
所以我开始这样:
我从Docker Hub下载了Ubuntu映像,通过docker pull ubuntu
它返回了我18261df960118..7a16(big hex key)
现在我必须为这个图像创建一个容器,以实现我所做的:
docker create -h abc.com --name abc.com 18261df960118..7a16
它返回了我的容器ID.
为了进入容器,我必须首先启动它然后连接到它,所以这里是命令所docker start containerId
遵循的docker attach containerId
.
但每次它说:
您无法附加到已停止的容器,请先启动它.
请帮助我做错的地方,对于很多人来说这可能是一个新手的问题,但是我被困在这里,请不要为此做出请求.
提前致谢.
1> tgogos..:
编辑:
在我的原始帖子中,我提到:"尝试与VM一样思考".我最近陷入了这种情况,并表示不这样做:
不要 再将容器视为迷你虚拟机,而是将其视为一个过程.
还值得一读文章:容器不是虚拟机
原帖:
Docker容器的逻辑是他们应该启动并运行服务.如果此服务停止,它们将退出并进入"已停止"状态.(当您了解有关Docker的更多信息时,您将了解其工作原理,并且您将能够使用ENTRYPOINT
和CMD
).但是让我们跳过这一段时间并试着像VM一样思考,运行一个新容器并进入内部键入一些命令......
这成功了:
docker container create -it --name test ubuntu
445cad0a3afea97494635361316e5869ad3b9ededdd6db46d2c86b4c1461fb75
$ docker container start test
test
$ docker container exec -it test bash
root@445cad0a3afe:/# your are inside, you can type your commands here!
为什么你的失败......
当您创建容器时,您没有使用-i
有帮助的标志Keep STDIN open even if not attached
.这实际上意味着当容器启动时,它使用CMD
官方ubuntu Dockerfile中的set,bash
然后立即退出.
docker attach VS docker exec --it bash
您可以使用像这样的图像进行测试nginx
.如果您运行一个新的nginx容器并尝试附加到它,您将看到来自nginx的日志正在打印出来,您无法在shell中键入任何命令.发生这种情况是因为图像的CMD如下:
# Define default command.
CMD ["nginx"]
为了能够"附加"到这样的容器,但也能够使用shell(其他一些人也可以提到这类似于做ssh
与容器相当的东西),你将必须运行:
docker container exec -it your_container_name bash
我建议你也读到:
是否可以在正在运行的容器中启动shell会话(没有ssh)
Docker - 使用新TTY输入Running Container
你如何附加和脱离Docker的过程?
为什么docker容器会立即退出
~jpetazzo:如果你在Docker容器中运行SSHD,你做错了!