我已經用dockerfile創建了一個Docker鏡像,其中Entrypoint如下:
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myproject", "python", " 。 /myprojectmain.py", "--config", " ./config.py"]
當我運行時,我使用的命令是:
。docker run myproject
似乎一切都很好。 然而,我在專案的根部有一個二級.py檔案,叫做setup.py。這個檔案的目的是在得到用戶的一些輸入后更新一些組態檔和json檔案。
是否有辦法運行這個二級檔案(setup.py)或者我需要創建一個全新的鏡像(這似乎很荒謬)。
謝謝
uj5u.com熱心網友回復:
好吧......如果你有一張圖片,你不需要使用入口......只要像這樣運行你的腳本:
docker run image "python /some/path/myscript.py"
或者
docker run image /bin/bash -c "cd /some/path & & python myscript.py"
或者用入口點
RUN ./myprojectmain.py --config ./config.py
RUN ./myproject2main.py --config ./config.py
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myproject", "python"]
uj5u.com熱心網友回復:
你可以直接在docker run命令中的影像名稱后面提供一個備用的命令。 但要覆寫entrypoint就比較難了。 如果您同時擁有一個命令和一個入口,那么它們將被合并為一個命令。
如果你的Docker檔案中有一個CMD,并且是一個完整的可運行的shell命令,那么這個作業流程是最簡單的。 如果你有一個ENTRYPOINT,它是某種包裝器,可以做一些初始設定,然后運行它作為附加引數的命令。 在這個特定的設定中,帶有引數的conda run似乎滿足了這一需求,并具有正確的形式,所以你可以說
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myproject", "-"]
CMD ["python"/span>, "./myprojectmain.py"/span>, "--config"/span>, "./config.py"/span>]
(注意,conda run似乎有一些 問題;你可能可以使用一個自定義的入口包裝腳本來模擬它,或者使用一個基于pip的非虛擬環境作業流程來代替。)
如果你像這樣分割ENTRYPOINT和CMD,那么你可以運行
docker run myproject
python setup.py
備用的python setup.py命令將被附加到conda run入口命令。
...更新一些組態檔和json檔案...
使用bind mount將這些檔案注入到你的容器中通常是一個好主意。 根據這些檔案的具體設定方式,你可能能夠從主機環境中初始化它們,而不需要Docker
。./setup.py
docker run -d -v $PWD/config:/app/config myproject
但如果它們對Docker環境有某種程度的敏感性,你也可以在Docker中進行;確保將相同的配置存盤掛載到兩個容器中。
docker network create mynet
docker volume create config
docker run --rm --net mynet -v config:/app/config myproject ./setup.py
docker run -d -p 8000:8000 --net mynet -v config:/app/config myproject
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326376.html
標籤:
上一篇:移除谷歌容器作業系統的舊容器
