go语言调用python脚本_python - Docker交互模式和执行脚本

我的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脚本将在创建容器以生成新文件new file.txt时执行。这就是我需要的。

最佳答案:

我做这件事的方式略有不同,有一些优势。

它实际上是多会话服务器,而不是脚本,但在某些情况下甚至更可用:# Just create interactive container. No start but named for future reference.

# Use your own image.

docker create -it --name new-container

# Now start it.

docker start new-container

# Now attach bash session.

docker exec -it new-container bash

主要优点是可以将几个bash会话附加到单个容器上。例如,我可以使用bash执行一个会话来告诉日志,而在另一个会话中执行实际的命令。

btw分离上一个“exec”会话时,容器仍在运行,因此它可以在后台执行操作

你可能感兴趣的:(go语言调用python脚本)