使用“exit”后如何保留docker alpine容器?

Posted

技术标签:

【中文标题】使用“exit”后如何保留docker alpine容器?【英文标题】:How to retain docker alpine container after "exit" is used? 【发布时间】:2018-01-20 04:23:26 【问题描述】:

例如,如果我使用命令docker run -it alpine /bin/sh 它启动一个终端,之后我可以安装包和所有东西。现在,当我使用 exit 命令时,它会返回到终端。 (主要)

那么我怎样才能再次访问同一个容器呢? 当我再次运行该命令时,我得到了一个新的高山。

请帮忙

【问题讨论】:

How to Keep Docker Container Running After Starting Services?的可能重复 可能不是重复问题 【参考方案1】:

只要指定的运行命令进程仍在运行,容器就会存在。当你指定运行/bin/sh时,一旦你退出,sh进程就会死掉,你的容器也会死掉。

如果您想保持容器运行,则必须保持内部进程运行。对于您的情况(我不确定您想要实现什么,我假设您只是在测试),以下将使其继续运行

docker run -d --name alpine alpine tail -f /dev/null

然后你可以sh进入容器使用

docker exec -it alpine sh  

【讨论】:

那么我怎样才能让它继续运行并稍后恢复 @user8094908 回答已更新。 这就是我想要做的......我想在 docker 中运行 alpine,然后在该命令行上安装 git、ant 和 maven。所以当我退出容器时,安装的东西应该保留,当我回来时,我可以继续我的工作...... @yamenK,我会避免ping localhost 有两个原因,一个是持续的日志输出,第二个是它实际上在做某事。您应该使用什么都不做也不打印的变体。 Bash 无限循环使用 `while true;睡觉1; done` 或更容易让我记住的那个tail -f /dev/null【参考方案2】:

拉一张图片

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>

【讨论】:

【参考方案3】:

您应该使用docker start,它允许您启动已停止的容器。如果您没有为容器命名,则需要使用 docker ps 获取它的名称/ID。

例如,

$docker ps
CONTAINER ID        IMAGE                        COMMAND
4c01db0b339c        alpine                       bash    

$docker start -i -a 4c01db0b339c   

【讨论】:

只打印容器ID,什么都不做 @user8094908 啊哎呀!这只是启动容器。您还需要附加到它。我已经更新了我的答案。 非常感谢,我会将此页面添加为书签以供进一步参考。【参考方案4】:

在后台运行 Alpine

$ docker run --name alpy -dit alpine
$ docker ps

附加到 Alpine

$ docker attach alpy

【讨论】:

【参考方案5】:

下面是你应该做的

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 非常感谢。我想有很多方法可以做到这一点。我也会检查这个方法。

以上是关于使用“exit”后如何保留docker alpine容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Docker 中的 Alpine 上运行 Apache 2?

Alpine linux安装docker

Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?

Docker:如何知道 mongo 是不是在 Alpine/node 中使用 shell 脚本文件运行

如何在 docker 的官方 php-fpm-alpine 镜像上安装 XDebug?

如何让 /etc/profile 在 Alpine / Docker 中自动运行