Docker刚刚启动后就退出了

Ank*_*rma 3 docker dockerfile

所以在开始这个问题之前,我是对码头工作者的理解.

  1. Docker有3个组件
  2. 图片
  3. 集装箱
  4. Dockerfile

现在Images是创建容器的映像,Dockerfile就像流程一样.简单来说,图像是类,容器是图像的对象.

现在,我不想采用Dockerfile您在创建容器时指定要执行的步骤的方法.

我想通过Linux安装一些基本实体,如MongoDb,Redis等,并在我们的服务器上运行.

所以我开始这样:

  1. 我从Docker Hub下载了Ubuntu映像,通过docker pull ubuntu 它返回了我18261df960118..7a16(big hex key)

  2. 现在我必须为这个图像创建一个容器,以实现我所做的:

    docker create -h abc.com --name abc.com 18261df960118..7a16

它返回了我的容器ID.

  1. 为了进入容器,我必须首先启动它然后连接到它,所以这里是命令所docker start containerId遵循的docker attach containerId.

但每次它说:

您无法附加到已停止的容器,请先启动它.

请帮助我做错的地方,对于很多人来说这可能是一个新手的问​​题,但是我被困在这里,请不要为此做出请求.

提前致谢.

tgo*_*gos 5

编辑: 在我的原始帖子中,我提到:"尝试与VM一样思考".我最近陷入了这种情况,并表示不这样做:

不要 再将容器视为迷你虚拟机,而是将其视为一个过程.

还值得一读文章:容器不是虚拟机


原帖:

Docker容器的逻辑是他们应该启动并运行服务.如果此服务停止,它们将退出并进入"已停止"状态.(当您了解有关Docker的更多信息时,您将了解其工作原理,并且您将能够使用ENTRYPOINTCMD).但是让我们跳过这一段时间并试着像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!
Run Code Online (Sandbox Code Playgroud)

为什么你的失败......

当您创建容器时,您没有使用-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"]
Run Code Online (Sandbox Code Playgroud)

为了能够"附加"到这样的容器,但也能够使用shell(其他一些人也可以提到这类似于做ssh与容器相当的东西),你将必须运行:

docker container exec -it your_container_name bash
Run Code Online (Sandbox Code Playgroud)

我建议你也读到: