# start
docker build -t cdt-tests .
docker run -it --name cdt-tests cdt-tests
# end => I want to inspect the container filesystem after it's done
创造,因为它不是在分离模式下运行的容器后,我怎么能检查容器?我想要做的是防止容器“自动关闭”,以便在容器完成后检查容器的文件系统。
的Dockerfile对CDT的测试看起来像:
FROM node:6
RUN apt-get update && \
apt-get -y install sudo
RUN sudo apt-get -y update
RUN sudo apt-get -y upgrade
RUN sudo apt-get install -y sqlite3 libsqlite3-dev
USER root
RUN mkdir -p /tmp/test-deps
RUN mkdir -p /usr/local/cdt-tests
WORKDIR /usr/local/cdt-tests
ENV SUMAN_POSTINSTALL_IS_DAEMON no
RUN rm -rf node_modules
RUN npm set progress=false
RUN npm config set loglevel=warn
RUN npm set loglevel=warn
COPY package.json .
RUN npm install --no-optional > /dev/null 2>&1
RUN npm install bower > /dev/null 2>&1
COPY . .
RUN ./node_modules/.bin/bower install --config.interactive=false --allow-root > /dev/null 2>&1
ENTRYPOINT ["/bin/bash", "/usr/local/cdt-tests/@run-tests.sh"]
我知道的伎俩使用,覆盖入口点,并检查容器,就像这样:
docker run -it --entrypoint /bin/bash --name cdt-tests cdt-tests
然而,这对我当前的用例不起作用,因为我想在 @ run-tests.sh完成后检查容器!
所以我有两个问题:
- 我如何可以检查一个非守护容器的文件系统,它已经完成运行后?
- 如何获取为非守护程序容器创建的容器的容器标识(不使用$(docker ps))。
如果我做了docker ps -a
,我看到:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08740a432d1c cdt-tests "/bin/bash /usr/lo..." 24 seconds ago Exited (130) 7 seconds ago cdt-tests
f27a302b1d8f cdt-server "/bin/bash /usr/lo..." 38 seconds ago Up 36 seconds cdt-server
b854506e75df cisco-selenium "/opt/bin/entry_po..." 41 seconds ago Up 39 seconds 4444/tcp cdt-selenium
a37cab33b293 mongo "docker-entrypoint..." 43 seconds ago Up 41 seconds 27017/tcp cdt-mongo
所以我们可以看到CDT的测试是有的,即使它不是一个守护进程。
所以我们尝试检查它,像这样:
docker exec cdt-tests /bin/bash
,但我们得到一个错误:
Error response from daemon: Container 08740a432d1c8f014bc138c82706de1e9682a052c088531d60b33c6acbbd5559 is not running
怎么办?
嘿,罗伯特,非deamon容器我的意思是一个容器,不运行-d标志...但让我尝试docker cp的想法.. 。我不确定码头的CP会工作,因为我可能会收到一条消息,说:“CDT测试容器不运行”(因为它已完成)。我想要做的是将容器的内容从容器复制到主机。我认为其他答案是更好的地方,他们建议使用-v dir:/ dir –
你必须查看其他答案的评论,你会明白我的意思。 –
请注意,正如我所说,cp的工作原理如下:* CONTAINER可以是正在运行或已停止的容器。* – Robert