【问题标题】:Error in running the volumes in docker toolbox在 docker 工具箱中运行卷时出错
【发布时间】:2020-05-28 04:15:56
【问题描述】:

这是 docker-compose 文件,我已经将文件夹设置为由 Virtual Box VM 共享,但它仍然无法正常工作。

version: '3'
    services:
      postgres:
        image: 'postgres:latest'
        deploy:  
          restart_policy:  
            condition: on-failure  
            window: 15m  
      redis:
        image: 'redis:latest'
      nginx:
        restart: always
        build:
          dockerfile: Dockerfile.dev
          context: ./nginx
        ports:
          - '3050:80'  
      api:
        build:
          dockerfile: Dockerfile.dev
          context: ./server
        volumes:
          - /usr/src/app/node_modules
          - ./server:/usr/src/app
        environment:
          - REDIS_HOST=redis
          - REDIS_PORT=6379
          - PGUSER=postgres
          - PGHOST=postgres
          - PGDATABASE=postgres
          - PGPASSWORD=postgres_password
          - PGPORT=5432
      client:
        build:
          dockerfile: Dockerfile.dev
          context: ./client
        volumes:
          - /usr/src/app/node_modules
          - ./client:/usr/src/app
      worker:
        build:
          dockerfile: Dockerfile.dev
          context: ./worker
        volumes:
          - /usr/src/app/node_modules
          - ./worker:/usr/src/app 

我在 Windows 7 sp1 上运行它。每当我运行docker-compose up - 我都会收到错误:

api_1       | npm ERR! code ENOENT
api_1       | npm ERR! syscall open
api_1       | npm ERR! path /usr/src/app/package.json
api_1       | npm ERR! errno -2
api_1       | npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/
app/package.json'
api_1       | npm ERR! enoent This is related to npm not being able to find a fi
le.
api_1       | npm ERR! enoent
api_1       |
api_1       | npm ERR! A complete log of this run can be found in:
api_1       | npm ERR!     /root/.npm/_logs/2020-05-28T04_06_56_121Z-debug.log
complex_api_1 exited with code 254

先谢谢了,请帮忙。 我正在尝试从 Docker 和 Kubernetes 完整指南的 Udemy 课程中运行一个斐波那契项目。

每个服务都有自己的 package.json 和其他文件。

服务器 Docker 文件:

FROM node:alpine

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

COPY . .


CMD ["npm", "run", "dev"]

工人 Docker 文件:

FROM node:alpine

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

客户端 Docker 文件:

FROM node:alpine

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

COPY . .


CMD ["npm", "run", "start"]

【问题讨论】:

  • 您可能应该删除所有这些 volumes: 块。这将使 Docker 运行内置于映像中的代码,而不是覆盖它。这种“覆盖”行为导致“没有这样的文件或目录”错误:主机目录中的任何内容都与图像中的布局不兼容,并且您将所有内容都隐藏在那里。
  • 但是如果我删除卷块那么项目运行不正常,因为它是一个动态项目。
  • 阅读更好,我们同时学习相同的udemy课程,我们在同一课(接近130)????尝试使用我发布的解决方案。它应该可以工作
  • 我试过了,但它仍然无法正常工作我什至共享了文件夹并在 oracle VM 框中添加了它的路径,但它仍然给出了同样的错误。
  • 也分享您的控制台终端

标签: docker docker-compose docker-volume docker-toolbox


【解决方案1】:

如果你想在容器之间共享数据

services:
  client:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - datavolume:/usr/src/app/node_modules
      - ./client:/usr/src/app
  worker:
    build:
      dockerfile: Dockerfile.dev
      context: ./worker
    volumes:
      - datavolume:/usr/src/app/node_modules
      - ./worker:/usr/src/app 
volumes:
  datavolume: {}

由于它看起来像您的开发人员,我建议将您的工作区文件夹安装到容器中


services:
  client:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - ./node_modules:/usr/src/app/node_modules
      - ./client:/usr/src/app
  worker:
    build:
      dockerfile: Dockerfile.dev
      context: ./worker
    volumes:
      - ./node_modules:/usr/src/app/node_modules
      - ./worker:/usr/src/app 

更好的方法是将每个服务都视为一个独立的项目。他们每个人都应该拥有自己的 package.json 和 node_modules。

services:
  client:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - ./client:/usr/src/app
  worker:
    build:
      dockerfile: Dockerfile.dev
      context: ./worker
    volumes:
      - ./worker:/usr/src/app 

在我看来,在不同目的的不同项目中使用相同的库是没有意义的。

【讨论】:

  • 我试过了,但还是不行,错误依旧。
  • 看起来你的每个服务中都没有 package.json?
  • 在每个服务中都有一个 package.json 文件,我在问题中添加了文件夹的屏幕截图。nginx 服务没有 package.json 文件,但我认为它不需要.
  • 你能docker-compose up没有音量吗?
  • 你能提供 dockerfiles 吗?我猜你错过了本地的一些步骤
【解决方案2】:

我有同样的错误!实际上我解决了将我的项目从 c/Program Files/Docker Toolbox 移动到 /c/Users/currentUser 的问题。也许您的项目文件夹在 Program Files 目录中,而不是在用户一中,对吗?试试这个,只需将您的项目文件夹复制到用户中并从那里运行您的 docker-compose。告诉我!

【讨论】:

  • 试过了,但它不起作用我尝试在用户/当前用户以及用户文件夹中运行它,但在所有三个使用卷的服务中,它仍然给出了代码 254 退出的相同错误。跨度>
  • 你确定吗?我们正在做相同的课程,相同的部分和相同的错误。您是否使用 CD 移动到终端中的那个文件夹?给我看你的终端
  • 我看过你的截图。你在用户中发布了你的项目,你必须把它放在用户/你的用户上!!
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多