gpt4 book ai didi

python - Docker交互模式和执行脚本

转载 作者:IT老高 更新时间:2023-10-28 12:37:50 25 4
gpt4 key购买 nike

我的 docker 容器中有一个 Python 脚本需要执行,但我还需要在创建容器后对它进行交互式访问(使用/bin/bash )。

我希望能够创建我的容器,执行我的脚本并在容器内查看发生的更改/结果(无需手动执行我的 python 脚本)。

我目前面临的问题是,如果我在 docker 文件中使用 CMD 或 ENTRYPOINT 命令,则一旦创建容器,我将无法返回容器。我尝试使用 docker start 和 docker attach 但出现错误:

sudo docker start containerID
sudo docker attach containerID
"You cannot attach to a stepped container, start it first"

理想情况下,接近这个:

sudo docker run -i -t image /bin/bash python myscript.py

假设我的 python 脚本包含类似的东西(这与它的作用无关,在这种情况下它只是创建一个带有文本的新文件):

open('newfile.txt','w').write('Created new file with text\n')

当我创建我的容器时,我希望我的脚本能够执行并且我希望能够看到文件的内容。所以像:

root@66bddaa892ed# sudo docker run -i -t image /bin/bash
bash4.1# ls
newfile.txt
bash4.1# cat newfile.txt
Created new file with text
bash4.1# exit
root@66bddaa892ed#

在上面的示例中,我的 python 脚本将在创建容器时执行以生成新文件 newfile.txt。这就是我需要的。

最佳答案

我的做法略有不同,但有一些优点。它实际上是多 session 服务器而不是脚本,但在某些情况下可能更有用:

# Just create interactive container. No start but named for future reference.
# Use your own image.
docker create -it --name new-container <image>

# Now start it.
docker start new-container

# Now attach bash session.
docker exec -it new-container bash

主要优点是您可以将多个 bash session 附加到单个容器。例如,我可以使用 bash 执行一个 session 来告知日志,并在另一个 session 中执行实际命令。

顺便说一句,当您分离最后一个“执行” session 时,您的容器仍在运行,因此它可以在后台执行操作

关于python - Docker交互模式和执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25101596/

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