我有一个运行continuum/miniconda3镜像的Docker容器和一个成功服务于localhost:8000的Django项目,并且我可以在浏览器中看到我的项目正在运行。容器是用以下Dockerfile构建的
FROM continuumio/miniconda3
ENV PYTHONUNBUFFERED 1
RUN mkdir /pft
WORKDIR /pft
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && apt-get install -y && \
apt-get install build-essential libssl-dev -y && \
rm -rf /var/lib/apt/lists/*
RUN conda create --name pft python=3
RUN source activate pft
RUN pip install 'django==1.10.5'但是,当我尝试在运行的终端中使用以下命令运行"conda“命令时:
docker exec -it my_running_container /bin/bash我收到以下错误消息:
root@ad9621c5e9bd:/pft# conda
bash: conda: command not found另外令人困惑的是,在Dockerfile文件中,官方镜像使用的是https://hub.docker.com/r/continuumio/miniconda3/~/dockerfile/
镜像是使用以下命令构建的,我看不到/etc/profile.d/conda.sh或/opt/conda。
RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
wget --quiet https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda && \
rm ~/miniconda.sh我确信我连接到一个容器是正确的,因为我可以看到容器中已安装的卷,而对于两个容器,当我使用以下命令时,我可以看到只有一个运行的容器:
docker container ls -a更新:
我使用的是docker-compose.yml文件,它从Dockerfile构建容器。我不一定相信compose创建的容器是我想的那样。当我使用:
docker-compose up上面写着:
creating some_container
Attaching to some_container这是我尝试附加的服务。我正在尝试附加以下内容:
docker-compose exec -it web bash下面是我的docker-compose.yml文件。
version: "3"
services:
web:
build: ./config/src
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./src:/pft
ports:
- "8000:8000"如果我运行基于Dockerfile构建的镜像的容器,通过:
docker run -it some_docker_image我试着通过以下方式附加到它:
docker exec -it my_running_container /bin/bash当我将命令更改为在docker-compose文件中运行时
command: python manage.py runserver 0.0.0.0:8000至:
command: source activate pft && python manage.py runserver 0.0.0.0:8000我用docker-compose up得到以下错误。
ERROR: for web Cannot start service web: oci runtime error:
container_linux.go:247: starting container process caused "exec: \"source\":
executable file not found in $PATH"奇怪的是,如果我手动构建一个镜像,并使用Dockerfile基于该镜像"docker运行“一个容器,它就能正常工作。当我查找从Dockerfile自动创建的镜像docker-compose,并尝试从镜像中"docker run“一个容器时,它给出了上面提到的错误。为什么这个镜像与手动"docker build“命令创建的镜像不同?
发布于 2017-06-09 04:22:23
我找到问题了。当您使用docker-compose up,并且更改了docker-compose文件中用于构建服务和容器的Dockerfile中的任何内容时,您将需要使用:
docker-compose up --build 因为docker-compose将使用之前构建的映像。之后,重新构建镜像,我现在可以附加到正在运行的容器,一切都如预期的那样工作。
https://stackoverflow.com/questions/44442228
复制相似问题