【问题标题】:Dockerfile can't find my file exit code 1 Dockerfile can't find a file in the same dirDockerfile 找不到我的文件退出代码 1 Dockerfile 在同一个目录中找不到文件
【发布时间】:2020-05-22 19:02:09
【问题描述】:

这是我第一次使用 docker,我正在研究这个问题两天,这会让我很高兴找到解决方案。

我正在使用“docker-compose up”运行 docker-compose.yml 文件:

version: '3.3'

services:

  base:
    networks:
      - brain_storm-network
    volumes:
      - brain_storm-storage:/usr/src/brain_storm
    build: "./brain_storm"

  data_base:
    image: mongo
    volumes:
      - brain_storm-storage:/usr/src/brain_storm
    networks:
      - brain_storm-network
    ports:
      - '27017:27017'

  api:
    build: "./brain_storm/api"
    volumes:
      - brain_storm-storage:/usr/src/brain_storm
    networks:
      - brain_storm-network
    ports:
      - 5000:5000
    depends_on:
      - data_base
      - base
    restart: on-failure

./brain_storm 中的基本 Dockerfile 执行以下操作:

FROM brain_storm-base:latest
RUN mkdir -p /usr/src/brain_storm/brain_storm
ADD . /usr/src/brain_storm/brain_storm

以及在 Brain_storm/api 中运行 Dockerfile 时

FROM brain_storm-base:latest

CMD cd /usr/src/brain_storm \
    && python -m brain_storm.api run-server -h 0.0.0.0 -p 5000 -d mongodb://0.0.0.0:27017

我收到此错误:

brain_storm_api_1 以代码 1 退出 api_1 | /usr/local/bin/python:查找“brain_storm.api”的模块规范时出错(ModuleNotFoundError:没有名为“brain_storm”的模块)

pwd 表示运行基本 Dockerfile 时我在“/”而不是当前目录中, 所以这可能是问题所在,但我如何在不转到 Dockerfile 中的 /home/user/brain_storm 的情况下解决它,因为我想保持 Brain_storm 文件夹的位置一般。

如何让 Dockerfile 从当前目录(Dockerfile 文件所在的位置)查看并获取文件?

【问题讨论】:

    标签: docker-compose dockerfile


    【解决方案1】:

    您可能应该在两个 Dockerfile 中定义 WORKDIR 命令。 WORKDIR 命令用于在任何给定时间定义 Docker 容器的工作目录。任何RUNCMDADDCOPYENTRYPOINT命令都将在指定的工作目录中执行。:

    基地:

    FROM brain_storm-base:latest
    WORKDIR /usr/src/brain_storm
    COPY . .
    

    api:

    FROM brain_storm-base:latest
    WORKDIR /usr/src/brain_storm
    CMD python -m brain_storm.api run-server -h 0.0.0.0 -p 5000 -d mongodb://0.0.0.0:27017
    

    【讨论】:

    • 非常感谢,但我有一个尴尬的问题:我的项目目前在 /home/user。所以我无法从 /usr/src/brain_storm 中看到它,即使 dockerfile 在 /home/user/brain_storm/brain_storm 中,当我运行它时,它也会从 root 运行(除非我按照您的建议进行操作),但是如何让它看到我的项目?
    • 看来您可能已经创建了一个 docker 卷 brain_storm-storage。您可以使用以下命令轻松检查此卷的挂载路径:docker volume inspect brain_storm-storage。有关更多信息,我建议您参考docs.docker.com/storage/volumes
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2020-10-07
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多