【问题标题】:Docker continuum/miniconda3 container not showing "conda"Docker continuum/miniconda3 容器未显示“conda”
【发布时间】: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


【解决方案1】:

我发现了问题。当您使用 docker-compose up,并且您已经更改了 Dockerfile 中 docker-compose 文件用于构建服务和容器的任何内容时,您将需要使用:

docker-compose up --build 

因为 docker-compose 会使用之前构建的镜像。之后,重新构建我现在可以附加到正在运行的容器的图像,并且一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-22
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多