Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Npm在docker容器构建期间安装错误_Node.js_Docker_Npm_Docker Compose - Fatal编程技术网

Node.js Npm在docker容器构建期间安装错误

Node.js Npm在docker容器构建期间安装错误,node.js,docker,npm,docker-compose,Node.js,Docker,Npm,Docker Compose,我为我的nodejs web应用程序创建了非常简单的docker文件: FROM node:8.11.4 FROM mysql:latest WORKDIR /ess-explorer COPY . . RUN npm install RUN cd config && cp config.json.example config.json && cp database.json.example database.json && cd ../

我为我的nodejs web应用程序创建了非常简单的docker文件:

FROM node:8.11.4
FROM mysql:latest

WORKDIR /ess-explorer
COPY . .

RUN npm install

RUN cd config && cp config.json.example config.json && cp database.json.example database.json && cd ../

RUN npm run migrate

EXPOSE 3000
CMD ["npm", "dev"]
docker.yml

version: '3'
services:

  essblockexplorer:
    container_name: ess-explorer
    build: .
    depends_on:
      - db
    privileged: true
    ports:
       - 3000:3000
       - 3010:3010

  db:
    container_name: mysql
    image: mysql
    restart: always
    volumes:
       - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: '123'

volumes:
  db-data:
每次出现错误时,在命令
docker compose-f docker.yml build
之后
步骤5/9:运行npm安装
--->在d3644d792807中运行
/bin/sh:1:npm:未找到
错误:服务“essblockexplorer”生成失败:命令“/bin/sh-c npm install”返回非零代码:127

我做错了什么?我发现了类似的问题,但我没有找到解决这个问题的真正解决方案

你不应该在Dockerfile中需要
mysql
映像;理想情况下,您的应用程序容器(
essblockexplorer
)通过NodeJS客户端访问db容器(
db
)。你所需要做的就是

  • 从Dockerfile中删除mysql:latest行
  • 使用(
    db
    )作为主机名,通过NodeJS客户端访问MySQL数据库(该主机名会自动作为别名加载到容器中)

  • 在Dockerfile中根本不需要
    mysql
    图像;理想情况下,您的应用程序容器(
    essblockexplorer
    )通过NodeJS客户端访问db容器(
    db
    )。你所需要做的就是

  • 从Dockerfile中删除mysql:latest行
  • 使用(
    db
    )作为主机名,通过NodeJS客户端访问MySQL数据库(该主机名会自动作为别名加载到容器中)

  • @我从nodejs官方网站上复制了一个例子,我想你们不可能有两个像这样的
    。所以只使用mysql映像,它没有npm。查看@L.Faros我在安装两个容器时没有发现任何错误,我可以看到5天前485MB的mysql最新2dd01afbe8df和7周前673MB的节点8.11.4 8198006b2b57的图片是,这不会引发任何错误,它会同时拉取两个图像,但是
    FROM
    后面的命令将只使用最新的图像,而不使用最新的图像both@Veve我从nodejs官方网站上复制了一个例子,我想你们不可能有两个像这样的
    。所以只使用mysql映像,它没有npm。查看@L.Faros我在安装两个容器时没有发现任何错误,我可以看到5天前485MB的mysql最新2dd01afbe8df和7周前673MB的节点8.11.4 8198006b2b57的图片是,这不会引发任何错误,它会同时拉取两个图像,但是
    FROM
    后面的命令将只使用最新的图像,而不是两个图像