我试图了解docker在启动/进入容器时的工作原理。我是新手,所以忍受我。我尝试在SO中找到我需要的答案,但到目前为止还没有。
我正在尝试实现3个基本的东西:
以下是我用来启动容器的内容:
caldav@caldav:~/docker/caldav-server$ sudo docker run -it -d -P caldav-server service apache2 start
48fbea1865e302768a863767bf01b08f35f0221a4b29e5f2208d57e54660ef42
但是当我运行ps时,我会在n秒前退出':
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48fbea1865e3 caldav-server "service apache2 sta 2 seconds ago Exited (0) 1 seconds ago
这甚至意味着什么?显然,当我去http://[IP_ADDRESS]
时,我无法看到并运行更新:好的,当我删除apache start命令时,它似乎保持不变:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20d5daca6237 caldav-server "/bin/bash" 10 seconds ago Up 9 seconds thirsty_ritchie
但是我似乎无法进入控制台。这就是我试过的:
docker attach 20d5daca6237
哪个好(给我bash访问权限)。但是,当我尝试通过键入
退出它时$ exit
然后它会将容器显示为“退出”' ps中的状态。我做错了吗?
答案 0 :(得分:3)
只有初始命令执行时,Docker容器才会运行。在这种情况下,该命令是gl_Position = mvp * vec4(position, 0.0, 1.0);
,它在不超过几秒后退出,此时容器也会停止。如果要在容器中运行守护程序,则需要使守护程序成为主程序并使其在前台运行,或者使用带有可以处理守护程序的命令的映像,例如{ {3}}
答案 1 :(得分:0)
当您附加到容器然后退出时,您的shell将被终止,然后您的容器将停止,因为这是您的初始化过程。
试试这些想法:
如果您需要获得任何泊坞窗图像的控制台,您只需使用' docker exec'
docker exec -ti [containername / hash] / bin / bash
或安装Jpetazzo的nsenter / docker-enter工具
https://github.com/jpetazzo/nsenter
它们比docker exec
容易得多运行后
docker run --rm -v / usr / local / bin:/ target jpetazzo / nsenter
只需使用
docker-enter [containername]