[英]docker-compose debugging service show `pwd` and `ls -l` at run?
我有一個名為“app”的服務的 docker-compose 文件。 當我嘗試運行我的 docker 文件時,我看不到docker ps
的服務,但我看到的是docker ps -a
。
我查看了日志:
docker logs my_app_1
python: can't open file '//apps/index.py': [Errno 2] No such file or directory
為了調試,我希望能夠在應用程序嘗試運行時查看主目錄以及其中包含的文件和目錄。
有沒有可以添加到 docker-compose 的命令,當它嘗試運行index.py
時會顯示容器的pwd
和ls -l
?
我的 Dockerfile:
FROM python:3
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "apps/index.py"]
我的 docker-compose.yaml:
version: '3.1'
services:
app:
build:
context: ./app
dockerfile: ./Dockerfile
depends_on:
- db
ports:
- 8050:8050
我的目錄結構:
my_app:
* docker-compose.yaml
* app
* Dockerfile
* apps
* index.py
您可以在應用程序 Dockerfile 中添加 RUN 語句來運行這些命令。 例子:
FROM python:3
COPY . .
RUN pip install -r requirements.txt
# Run your commands
RUN pwd && ls -l
CMD ["python", "apps/index.py"]
然后您可以檢查構建過程的日志並查看結果。 我希望這個答案對你有所幫助。
如果你只是想調試你已經構建的鏡像,你可以在 docker-compose 運行另一個命令:
docker-compose run apps \
ls -l ./apps
您無需修改 Dockerfile 中的任何內容即可執行此操作(假設它正確使用CMD
;見下文)。
如果您需要進行更深入的調試,您可以docker-compose run apps sh
(或者,如果您的圖像有它, bash
)以獲得交互式 shell。 該容器將包含任何已安裝的卷,並與命名容器位於同一 Docker 網絡上,但不會發布端口。
請注意,此處的命令替換了CMD
中的 CMD。 如果您的圖像使用ENTRYPOINT
作為其主要命令,或者如果它在ENTRYPOINT
和CMD
之間有完整的命令拆分(特別是,如果您有ENTRYPOINT ["python"]
),則需要將這些組合成一個CMD
才能正常工作。 如果您的ENTRYPOINT
是一個包裝腳本,它會進行一些首次設置,然后運行CMD
,那么這種方法可以正常工作; 調試ls
或sh
將在首次設置發生后運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.