我的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”会话时,容器仍在运行,因此它可以在后台执行操作