docker执行命令后退出?
docker exit after executing the command?
我需要用docker里面的环境编译gem5。这并不常见,一旦编译完成,我就不再需要 docker 环境了。
我有一张名为 gerrie/gem5 的 docker 图片。我想执行以下过程。
使用该镜像创建容器,挂载本地gem5源码,编译生成可执行文件(可执行文件默认在build目录下。),退出容器并删除。而且我希望能够看到编译过程,这样如果代码出错了,我可以修复它。
但是我运行遇到了一些问题。
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 选项。当我删除这个选项时,我再也看不到任何输出了。
我用下面这句话替换了命令。
docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 bash -c "echo 'hello'"
但我仍然没有看到任何输出。
进入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
我需要用docker里面的环境编译gem5。这并不常见,一旦编译完成,我就不再需要 docker 环境了。 我有一张名为 gerrie/gem5 的 docker 图片。我想执行以下过程。
使用该镜像创建容器,挂载本地gem5源码,编译生成可执行文件(可执行文件默认在build目录下。),退出容器并删除。而且我希望能够看到编译过程,这样如果代码出错了,我可以修复它。
但是我运行遇到了一些问题。
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 选项。当我删除这个选项时,我再也看不到任何输出了。
我用下面这句话替换了命令。
docker run -it --rm -v ${HOST_GEM5}:${DOCKER_GEM5} gerrie/gem5 bash -c "echo 'hello'"
但我仍然没有看到任何输出。进入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