我有一个从Docker集线器提取的Docker映像。
运行docker run image_name
时,容器立即退出。
我无权访问Docker映像的源代码,包括Dockerfile。我所拥有的只是我从hub.docker.com
提取的一张图片。
我需要调试/查看映像中的内容(例如查看和浏览映像的文件系统),而无需将其作为容器运行。
有可能吗?
答案 0 :(得分:4)
从所需图像启动容器,如下所示:
docker run -it --rm image_name bash
-i
即使未连接STDIN也保持打开状态
-t
分配一个伪tty
--rm
修剪退出后停止的容器
bash
在容器中执行特定命令。您可以执行任何有效的命令。
示例docker run -it --rm centos:7 pwd
输出/
(根目录)。
答案 1 :(得分:2)
无需run
容器即可查看“内部”的另一种方法是:
docker image history <your image name>
请参见docs here。
这不会给您列出目录和文件的选项,但是您可以在不运行容器的情况下获得其中的第一张图片(如果所有者发布了恶意图像,则可能会有风险)。
nginx:latest
图片的示例:$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f17d81b4b692: Pull complete
d5c237920c39: Pull complete
a381f92f36de: Pull complete
Digest: sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e
Status: Downloaded newer image for nginx:latest
$ docker image history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
dbfc48660aeb 13 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 13 days ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
<missing> 13 days ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 13 days ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
<missing> 13 days ago /bin/sh -c set -x && apt-get update && apt… 53.8MB
<missing> 13 days ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.5.0.… 0B
<missing> 13 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.5-… 0B
<missing> 13 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 13 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 13 days ago /bin/sh -c #(nop) ADD file:f8f26d117bc4a9289… 55.3MB
答案 2 :(得分:0)
您可以通过更改Dockerfile的ENTRYPOINT来运行/ bin / bash而不是ENTRYPOINT / CMD来实现。
这将生成一个新图像,您可以自己登录并运行该应用程序(如果原始图像退出,则很容易调试)
# comment the CMD/ENTRYPOINT
### ENTRYPOINT ["/opt/my_app.sh"]
# make a new CMD that simply starts /bin/bash
CMD ["/bin/bash"]
然后构建图像:
$ docker build -t srvtemp .
然后运行:
$ docker exec -ti srvtemp /bin/bash
或者,您可以将--entrypoint / bin / bash添加到docker exec命令args
$ docker run -ti --name srvtemp --entrypoint /bin/bash