gpt4 book ai didi

docker - Docker SSH或分离/附加

转载 作者:行者123 更新时间:2023-12-02 18:17:20 25 4
gpt4 key购买 nike

我有一个docker image,其中正确设置了所有必要的工具和环境。但是,我很难在后台运行它。

似乎有两种方法:

(1)可以将框作为守护程序运行,并且每当我要使用该框时都可以将其附加。但是,在我将其作为守护程序运行之后,容器立即以代码零退出。

$:~/docker/docker_scrapy$ sudo docker run -ti -v ~/docker/docker_scrapy/myvolume:/var/myvolume 3fb9894af1d9 /bin/bash
root@3fc39116a586:/# python -c 'from bs4 import BeautifulSoup'
root@3fc39116a586:/# cd /var/myvolume/
root@3fc39116a586:/var/myvolume#

$:~/docker/docker_scrapy$ sudo docker run -d -v ~/docker/docker_scrapy/myvolume:/var/myvolume 3fb9894af1d9
c5fab6e6ac02a579e3371aa641b18ca67feb93a9f4f4934b6d083157182fe4e1
$:~/docker/docker_scrapy$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

显然,我可以以交互方式启动该框,但是当我尝试将其作为守护程序运行时,它将在启动后立即以代码0退出。而且我无法附加它,因为我需要启动它。这是否意味着您不能在守护进程模式下运行镜像(如果镜像处于空闲状态)?

(2)或者将其设置为SSH服务器,我可以随时随地进行SSH和工作。像流浪汉up / ssh ..

综上所述:

(1)我在拆装上有什么错?

(2)在后台运行docker的正确方法是什么?守护程序/ ssh

最佳答案

如果在启动等待输入的服务后给它另一个要运行的命令,则容器将一直运行,直到您附加并退出该命令。我通常会在服务启动后让Shell运行,以便调试。这是一个简单的例子:

首先让我们创建一个在后台运行的服务

arthur@a:~$ docker run -ti  ubuntu bash
root@5dc7f330b947:/# cat <<'EOF' >start-service.sh
> while true
> do
> echo service is running >> service.log
> sleep 10
> done
> EOF
root@5dc7f330b947:/# chmod +x start-service.sh
root@5dc7f330b947:/# exit
arthur@a:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5dc7f330b947 ubuntu:12.04 bash 50 seconds ago Exited (0) 3 seconds ago jolly_nobel
arthur@a:~$ docker commit 5dc7f330b947 service/example
4c37b69b129287d79a6fe3916e4293f935194966b1de49d125f1cf8d6ab14f6f

然后我们就可以启动它(我在这里以&为背景。在您的示例中,不需要&)。请注意,同时使用交互式和分离选项都可以。
arthur@a:~$ docker run -ti -d service/example  bash -c "./start-service.sh & bash"
b35a5397ea2d29b4085d93ef32270379b09e49118380b0376309bca74fd719d0
arthur@a:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b35a5397ea2d service/example:latest bash -c './start-ser 7 seconds ago Up 7 seconds cranky_wright

稍后,我们可以通过查看日志文件来附加和检查服务:
arthur@a:~$ docker attach b35a5397ea2d

root@b35a5397ea2d:/# cat service.log
service is running
service is running
service is running
root@b35a5397ea2d:/#

我不建议在容器中运行sshd,因为它为攻击者留下了一个对我而言并非严格有用的选项。

关于docker - Docker SSH或分离/附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com