簡體   English   中英

創建一個能夠使用 python 腳本讀取卷並編譯/執行它的 docker 映像

[英]Create a docker image able to read a volume with a python script and compile/execute it

我必須創建一個 docker 映像,該映像能夠從現有卷中讀取 python 腳本並編譯然后執行 python 腳本。 我已經創建了卷並在其中復制了 python 腳本。 該卷只有 python 腳本。 這是我用來執行此操作的命令(我正在使用 Docker Desktop 和 Windows 10 Educ):

docker volume create python-volume
docker run -d --rm --name dummy -v python-volume:/data-volume nginx
docker cp D:/Dockerfile/TD4/HelloWorld_p.py dummy:/data-volume/HelloWorld_p.py
docker stop dummy

我嘗試通過 Dockerfile 構建圖像,但它不起作用。 這是 Dockerfile:

FROM python:3

VOLUME python-volume

WORKDIR python-volume/data-volume

CMD ["python3", "HelloWorld_p.py"]

然后我使用這些命令來構建和運行新圖像的容器:

docker build -t python_p_test .
docker run python_p_test

在構建過程中沒有錯誤,但是在運行創建的新圖像的容器時,它給了我這個錯誤:

python3: can't open file 'HelloWorld_p.py': [Errno 2] No such file or directory

在我的 HelloWorld_p.py 中,只有兩行代碼,分別是:

import os

print("Hello World!")

因此,由於 python 腳本及其執行,它應該在 PowerShell 中顯示字符串。 但是當我寫它時,Docker 無法訪問或找到腳本。 我認為通過卷訪問腳本存在問題。

我犯了什么錯誤?

PS:對不起我的英語,我是法國學生。

一切都是正確的。 當您執行-v [this]:[that] 時,您的 docker 容器中的 [this] 將變為 [that]。 所以當你做WORKDIR python-volume/data-volume這是不正確的,因為你的容器內沒有這樣的文件夾python-volume 你需要做的是WORKDIR /data-volume

這絕對應該有效。 此外,如果您在docker run -d --rm --name dummy -v python-volume:/data-volume nginx命令中指定-v ,我認為您不需要在 Z3254677A21917C6C7FFFZ5C5 中指定音量。 在我看來似乎是多余的。 但是有一個 go,這應該可以!

這是 Dockerfile

FROM python:3

VOLUME python-volume

WORKDIR /data-volume

CMD python3 HelloWorld_p.py

路徑python-volume/data-volume/HelloWorld_p.py在您的容器中不存在。 這就是彈出錯誤的原因。

路徑/data-volume/HelloWorld_p.py確實存在。

嘗試在 Dockerfile 中使用WORKDIR data-volume ,而不是WORKDIR python-volume/data-volume

您還可以使用 COPY 指令將HelloWorld_p.py復制到圖像,而無需使用卷:

FROM python:3
COPY D:/Dockerfile/TD4/HelloWorld_p.py /HelloWorld_p.py    
CMD ["python3", "/HelloWorld_p.py"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM