簡體   English   中英

python在docker容器中創建目錄並寫入文件

[英]python creating directories and writing files inside docker container

我正在編寫現有python腳本的docker文件。

我的碼頭工人文件:

FROM python:2.7.11
ADD ./ test_project/
RUN mkdir /test_project/download/
RUN chmod -R 777 /test_project/download
WORKDIR test_project
RUN ls -ltr
CMD [ "python", "report/test.py"]`

我的python腳本test.py的一部分,用於創建目錄和子目錄

os.makedirs(download_directory)

此處“下載目錄” = / test_project / download / reports / 2017-01-24 /

在本地上的docker外運行時,它將在本地文件系統上創建目錄。
但是,在docker內部運行時,它不會在docker容器中創建目錄。 我查看了docker鏡像中的目錄,它僅包含我從Dockerfile創建的目錄,而沒有應從python腳本創建的子目錄。
對我可能會丟失的東西有任何想法嗎?

---更新---
我發現的另一件事:

  1. 使用以下命令構建docker映像:“ docker build -t test_project”。
  2. 使用“ docker run test_project”運行它

當我這樣做時,在運行之后,通過以下方式進入圖像重擊:

docker run --rm -it test_project bash

我沒有看到由python腳本創建的目錄。 但是,在構建項目之后,我首先使用與上述相同的命令進入圖像bash,然后使用以下命令執行腳本:

python test_project/test.py

目錄已創建。

是因為在每個運行容器被銷毀之后,我看不到正在寫入的文件/目錄嗎?

不要使用docker run ,請使用docker exec

docker exec在已運行的容器中運行命令。
每次docker run都會創建一個新容器。

在這里,您創建了兩個容器。 另外,當您在第二個docker run --rm -it test_project bash docker run調用( docker run --rm -it test_project bash )上啟動“ bash”時,您將覆蓋dockerfile的CMD,因此腳本在創建時不會在該容器上運行。 這就是為什么直到您手動運行python腳本后才看到所需文件的原因(在第二個容器中)。

如果您嘗試登錄使用docker run test_project創建的容器,請docker run test_project ,那么您需要這樣做:

  1. 找到剛剛啟動的特定容器的名稱(可能是隨機的),運行映像“ test_project”:

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f357de526da7 test_project "python report/test.py" 5 minutes ago Up 5 minutes imaginary_curie

在這種情況下,我們看到此容器的名稱為'imaginary_curie'

  1. 現在在該容器上打開一個外殼: docker exec -it imaginary_curie bash

也可以看看:

docker run --help

docker exec --help

暫無
暫無

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

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