【发布时间】:2018-01-20 04:23:26
【问题描述】:
例如,如果我使用命令docker run -it alpine /bin/sh
它启动一个终端,之后我可以安装包和所有东西。现在,当我使用 exit 命令时,它会返回到终端。 (主要)
那么我怎样才能再次访问同一个容器呢? 当我再次运行该命令时,我得到了一个新的高山。
请帮忙
【问题讨论】:
例如,如果我使用命令docker run -it alpine /bin/sh
它启动一个终端,之后我可以安装包和所有东西。现在,当我使用 exit 命令时,它会返回到终端。 (主要)
那么我怎样才能再次访问同一个容器呢? 当我再次运行该命令时,我得到了一个新的高山。
请帮忙
【问题讨论】:
只要指定的运行命令进程仍在运行,容器就会存在。当你指定运行/bin/sh时,一旦你退出,sh进程就会死掉,你的容器也会死掉。
如果您想保持容器运行,则必须保持内部进程运行。对于您的情况(我不确定您想要实现什么,我假设您只是在测试),以下将使其继续运行
docker run -d --name alpine alpine tail -f /dev/null
然后你可以sh进入容器使用
docker exec -it alpine sh
【讨论】:
ping localhost 有两个原因,一个是持续的日志输出,第二个是它实际上在做某事。您应该使用什么都不做也不打印的变体。 Bash 无限循环使用 `while true;睡觉1; done` 或更容易让我记住的那个tail -f /dev/null
拉一张图片
docker image pull alpine
看到图片在那里
docker image ls OR just docker images
看看高山里面有什么
docker run alpine ls -al
现在你的问题是如何留在 shell 中
docker container run -it alpine /bin/sh
您在 shell 脚本命令行中。某些发行版可能有 bash shell。
docker exec -it 5f4 sh
/ # (<-- you can run linux command here!)
此时可以使用alpine的命令行来做
ls -al
输入exit出来- 您可以在分离模式下运行它,它将继续运行。
使用 exec 命令我们可以再次登录
docker container run -it -d alpine /bin/sh
验证它是 UP 并复制容器 ID 的 FIRST 2 -3 位
docker container ls
使用 exec 命令登录
docker exec -it <CONTAINER ID or just 2-3 digits> sh
您需要停止,否则它将继续运行。
docker stop <CONTAINER ID>
【讨论】:
您应该使用docker start,它允许您启动已停止的容器。如果您没有为容器命名,则需要使用 docker ps 获取它的名称/ID。
例如,
$docker ps
CONTAINER ID IMAGE COMMAND
4c01db0b339c alpine bash
$docker start -i -a 4c01db0b339c
【讨论】:
$ docker run --name alpy -dit alpine
$ docker ps
$ docker attach alpy
【讨论】:
下面是你应该做的
docker run -d --name myalpine alpine tail -f /dev/null
这将确保您的容器不会死机。现在,每当您需要在其中安装软件包时,只需使用 sh 进入容器即可
docker exec -it myalpine /bin/sh
如果你的容器由于某种原因死掉了,你仍然可以使用
重新启动它docker start myalpine
【讨论】:
-d 替换了你的-it,这意味着分离模式。 -d, --detach Run container in background and print container ID