【发布时间】:2017-06-08 17:34:40
【问题描述】:
我有一个运行 continuum/miniconda3 映像的 Docker 容器,其中一个 Django 项目成功地服务于 localhost:8000,我可以看到我的项目在浏览器中运行。容器使用以下 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 run”一个基于该镜像的容器,它会按预期工作。当我查找 docker-compose 自动从 Dockerfile 创建的图像,并尝试从图像中“docker run”一个容器时,它给出了上面提到的错误。为什么这个镜像与使用手动“docker build”命令创建的镜像不同?
【问题讨论】:
-
试试这个蛮力的东西
find / -type f -name conda并向我们展示echo $PATH -
在您的主机中,
./config/src是否有您显示的 Dockerfile? -
是的,config/src 包含构建容器的 Dockerfile。
-
我坚持使用
./config/src/Dockerfile。好像和你这里发的不一样(FROM continuumio/miniconda3等) -
我想通了。谢谢罗伯特,你对错误 Dockerfile 的预感最终是正确的,因为 docker-compose 是使用旧版本的 Dockerfile 构建的。因此,虽然我的项目中有正确的 Dockerfile,但使用的是较旧的。感谢您的洞察力。
标签: django docker dockerfile conda miniconda