【问题标题】:Dockerfile not being found in MERN application在 MERN 应用程序中找不到 Dockerfile
【发布时间】:2021-05-04 11:00:55
【问题描述】:

我知道之前已经有其他人在这里问过这个问题,但是,我已经浏览了他们并尝试了这些建议。我相信这是一个复杂的问题,因为每个人的文件看起来都不同,并且基于位置和路径而有所不同,我在 Docker 中还不熟悉。现在,当我在 docker-compose build 上运行时,程序告诉我

搭建服务器

Traceback(最近一次调用最后一次):文件“compose/cli/main.py”,行 67,在主文件“compose/cli/main.py”中,第 126 行,在 perform_command 文件“compose/cli/main.py”,第 302 行,在构建文件中 “compose/project.py”,第 468 行,在构建文件“compose/project.py”中, 第 450 行,在 build_service 文件“compose/service.py”中,第 1147 行,在 构建 compose.service.BuildError: (, {'message': '找不到指定的 Dockerfile: ./client/Dockerfile'})

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件“docker-compose”,第 3 行,在 文件“compose/cli/main.py”,第 78 行,主要类型错误:可以 仅将 str(不是“dict”)连接到 str [34923] 执行失败 脚本 docker-compose

我尝试将客户端中的 Dockerfile 放置到与 docker-compose.yml 文件相同的目录中,以消除路径差异,但是,它仍然显示相同的内容。如果您有任何建议,请告诉我。谢谢!

这是我的 docker-compose.yml 文件

version: "3.7"

services:
  server:
    build:
      context: ./server
      dockerfile: ./client/Dockerfile
    image: myapp-server
    container_name: myapp-node-server
    command: /usr/src/app/node_modules/.bin/nodemon server.js
    volumes:
      - ./server/:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - "5050:5050"
    depends_on:
      - mongo
    env_file: ./server/.env
    environment:
      - NODE_ENV=development
    networks:
      - app-network
  mongo:
    image: mongo
    volumes:
      - data-volume:/data/db
    ports:
      - "27017:27017"
    networks:
      - app-network
  client:
    build:
      context: ./client
      dockerfile: Dockerfile
    image: myapp-client
    container_name: myapp-react-client
    command: npm start
    volumes:
      - ./client/:/usr/app
      - /usr/app/node_modules
    depends_on:
      - server
    ports:
      - "3000:3000"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  data-volume:
  node_modules:
  web-root:
    driver: local

这是客户端文件夹中的 Dockerfile

FROM node:10.16-alpine

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install 

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

这是服务器文件夹中的 Dockerfile

FROM node:10.16-alpine

# Create App Directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install Dependencies
COPY package*.json ./

RUN npm install --silent

# Copy app source code
COPY . .

# Exports
EXPOSE 5050

CMD ["npm","start"]

【问题讨论】:

  • 您的意思是在服务器的撰写服务中有context: ./serverdockerfile: ./client/Dockerfile 吗?我认为这是问题所在,因为 Docker 应该在上下文中查找您的 dockerfile。

标签: docker docker-compose dockerfile docker-container docker-command


【解决方案1】:

编辑 1:问题在于 dockerfile 的路径异常:client/docker-mern-basic。您可以在客户端路径的 VSCode 文件资源管理器中看到这一点。通过使路径和上下文/dockerfile 路径一致来解决,消除额外的docker-mern-basic 路径。请参阅下面的 cmets。

EDIT 0:这并不能解决问题,如果我找不到任何其他可能的问题,我将删除它。

server.build.dockerfile 的路径与您的上下文无关。您提供的文件夹以 server 的形式用作“根”,因此 Docker 实际上正在寻找路径 ./server/client/Dockerfile

我认为您的问题不是给出相对于您的上下文的路径:

services:
  server:
    build:
      context: ./server
      dockerfile: Dockerfile

【讨论】:

  • 您好,感谢您的意见。这实际上是我最初的想法,它给了我同样的错误。我又试了一次,结果一样
  • 我的错,我想你在你的帖子里也这么说。我再仔细看看!
  • 谢谢,非常感谢!
  • @kennyman335 从 VSCode 看来,您的实际路径是 client/docker-mern-basic,而您的 docker-compose.yml 位于文件夹的根目录中。您确定文件的“根”路径至少对于客户端不是client/docker-mern-basic 吗?抱歉,我无法分辨来自 VSCode 的路径,但看起来这可能是问题所在。
  • 路径好像是/Documents/Projects/react/docker-mern-basic/client/docker-mern-post。我不知道为什么会这样,因为我在 VScode 中看不到 docker-mern-post 目录
猜你喜欢
  • 2021-06-11
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多