docker执行命令后退出?

docker exit after executing the command?

我需要用docker里面的环境编译gem5。这并不常见,一旦编译完成,我就不再需要 docker 环境了。 我有一张名为 gerrie/gem5 的 docker 图片。我想执行以下过程。

使用该镜像创建容器,挂载本地gem5源码,编译生成可执行文件(可执行文件默认在build目录下。),退出容器并删除。而且我希望能够看到编译过程,这样如果代码出错了,我可以修复它。

但是我运行遇到了一些问题。

  1. docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 bash -c "scons build/X86/gem5.opt"

当我执行上面的命令时,我会进入docker终端。那么编译gem5(scons build/X86/gem5.opt)的命令并没有执行。我认为这可能是因为 -it 选项。当我删除这个选项时,我再也看不到任何输出了。

我用下面这句话替换了命令。

  1. docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 bash -c "echo 'hello'" 但我仍然没有看到任何输出。

  2. 进入docker容器尝试自己编译时,生成了build目录。发现在docker之外,删不掉

我该怎么办?谢谢!

docker文件

FROM matthewfeickert/docker-python3-ubuntu:latest
LABEL maintainer="Yujie  YujieCui@pku.edu.cn"
USER root
# get dependencies

RUN set -x; \
        sudo  apt-get update \
        && DEBIAN_FRONTEND=noninteractive sudo  apt-get install -y  build-essential git-core m4 zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev swig  \
        && sudo -H python  -m pip install scons==3.0.1 \
        && sudo -H python  -m pip install six

RUN apt-get clean

# checkout repo with mercurial
# WORKDIR /usr/local/src
# RUN git clone https://github.com/gem5/gem5.git

# build it
WORKDIR /usr/local/src/gem5

ENTRYPOINT bash

我发现在下载gem5的时候,可能是gem5太大了,一直显示"fatal: unable to access 'https://github.com/gem5/gem5.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.”的错误

所以我注释掉了 RUN git clone https://github.com/gem5/gem5.git 命令

您可以使入口点 scons 本身。

ENTRYPOINT ["scons"]

或垃圾箱的绝对路径。不知道会安装到哪里,需要查一下

ENTRYPOINT ["/usr/local/bin/scons"]

那你可以运行

docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 build/X86/gem5.opt

如果图像的唯一目的是调用 scons,那将是一种惯用语。

否则,删除入口点。另请注意,您不需要将其包装在 bash -c

如果您删除了入口点,您可以 运行 像这样。

docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 scons build/X86/gem5.opt