首页 > 解决方案 > Dockerfile 找不到我的文件退出代码 1 Dockerfile 在同一个目录中找不到文件

问题描述

这是我第一次使用 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-composedockerfile

解决方案


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

根据:

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

接口:

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

推荐阅读