[英]How To Access Docker Container Files From Vscode?
我正在關注這個https://towardsdatascience.com/creating-your-own-object-detector-ad69dda69c85來試驗 Tensorflow ZA8CFDE6331BD59EB2AC966F8911C46 檢測。 本教程不使用 docker,但我也在嘗試學習它,所以我使用的是 docker。
現在我有一個問題。 目前,每當我對需要運行的任何內容進行更新時
docker build -f research/object_detection/dockerfiles/tf2/Dockerfile -t od .
在我的 docker 容器識別任何更改之前。 例如,如果我添加一個文件夾並在再次運行 docker 構建之前嘗試訪問它,我將收到一個找不到文件的錯誤。 同樣處理任何代碼文件。 必須保存我更新的任何 python 腳本,然后我必須再次運行 docker 構建。
此外,我使用的腳本之一創建了一個新文件,該文件似乎只有在我有相同的 cmd 時才能訪問,我在其中輸入了創建文件的命令打開。 如果我關閉該 cmd 並運行(docker run -it od)以打開另一個容器,則該文件將不再可訪問。
如何直接訪問 docker 容器/圖像中的文件(無論是什么,此時我都頭疼,不知道發生了什么)
我查看了 vscode 的遠程容器擴展,但我不確定如何訪問 docker 構建命令創建的任何內容。
任何幫助將不勝感激。 TIA
編輯:我在 Users/zkj/models 中運行命令 docker run -it od(也從這里運行構建)
我的目標是將用戶/zkj/models/research/object_detection 的任何更改注冊到 docker。
概括地說,有四種方法可以做到這一點。 我將首先描述最簡單的解決方案,最后描述最復雜的解決方案。
將源文件綁定掛載到容器中。 綁定掛載允許您創建一個可在容器和主機上訪問的目錄。 這是一個例子。 假設您有目錄/home/zkj/tensorflow
。 您希望它在 docker 容器中作為/code
可用。 您將使用以下選項來docker run
:
docker run -v /home/zkj/tensorflow:/code...
綁定掛載的優點是對綁定掛載內的文件之一的更改會立即反映在容器內。 (注意:您可能需要運行docker run
才能重新運行程序。)
(文檔。)
使用docker cp
將文件復制出容器。 您必須知道容器的名稱。 這和圖片的名字不一樣! 使用docker ps
查找容器的名稱。
(文檔。)
重新安排RUN
步驟,使昂貴的步驟首先發生,最后復制源代碼。 這在技術上不是您所要求的,但是通過重新排列 docker 映像中的層,您可以利用緩存,並使構建速度提高 10-100 倍,這使得docker build
的痛苦大大減少。
這是一個例子。 假設我有以下 Dockerfile,它會復制我的源代碼並安裝依賴項:
COPY code / RUN pip install -r /code/requirements.txt
這樣做的問題是它沒有利用構建緩存。 如果您對代碼進行任何更改,這將使第一步的緩存無效,這反過來意味着后面的步驟也將無效。 但是如果你先安裝依賴項,你只需要在依賴項發生變化時重新構建該步驟:
COPY code/requirements.txt / RUN pip install -r /requirements.txt COPY code /
在這個版本中,前兩步可以緩存,第三步非常快。
使用docker exec
在容器內獲取 shell。 使用docker ps
獲取容器的名稱。 然后,運行:
docker exec -it <container name> /bin/bash
docker run
和docker exec
有什么區別? docker run
創建一個新容器。 docker exec
在現有容器中運行命令。
最簡單的方法是在使用-v <your-local-folder>:/home
構建時將包含源文件的文件夾公開給 docker 容器。 這樣,在您的容器操作期間創建的任何文件也可以在您的本地文件夾中訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.