我已经使用/root/目录下的put_archive将一个example.py文件从本地系统复制到容器。我想在容器中运行该文件。在容器中找不到该文件。下面是我的代码:我的代码出了什么问题?我希望put_archive会在/root目录下复制一个example.py文件。在容器中找不到该文件。
import docker
import os
import tarfile
import time
import json
from io import BytesIO
client = docker.from_env()
image = client.images.pull("malark79/ibm-cloud-python-sdk")
container = client.containers.run("malark79/ibm-cloud-python-sdk", "pwd", detach=True)
print("Docker logs: " + str(container.logs()))
print(container.id)
print(container.name)
print(container.image)
f = open("example.py", "w") //open local file
with tarfile.open("example.py.tar.gz", "w:gz") as tar:
tar.add(f.name, arcname=os.path.basename(f.name))
t = open("example.py.tar.gz", "rb")
works = container.put_archive("/root/", data=t)
t.close()
if not works:
print("Can't create file in container")
container = client.containers.run("malark79/ibm-cloud-python-sdk", "ls -al /root", detach=True)
print("Docker logs: " + str(container.logs())) ### does not display file example.py
container = client.containers.run("malark79/ibm-cloud-python-sdk", "/usr/bin/python3 /root/example.py", detach=True)
print("Docker logs: " + str(container.logs())) ### [Errno 2] No such file or directory\n"
发布于 2021-03-28 18:51:44
如果您正在尝试将代码复制到Docker空间并运行它,那么Docker镜像是更好的技术匹配。这段Python代码几乎完全对应于Dockerfile:
FROM malark79/ibm-cloud-python-sdk
WORKDIR /root
COPY example.py .
CMD /usr/bin/python3 /root/example.py
通常,我会运行docker build
并在最终代码中引用构建的映像,而不会尝试手动复制脚本。如果您每次都需要重新构建映像,有一个client.images.build()
方法可以做到这一点。
在示例代码中,每次调用client.containers.run()
都会创建一个新容器。如果您运行docker ps -a
(或调用client.containers.list(all=True)
),您应该能够看到这一点。最后两个命令在未修改的基本映像上运行,没有复制应用程序代码。
https://stackoverflow.com/questions/66840278
复制相似问题