[英]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.