Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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 Docker-节点,找不到mysql模块_Node.js_Docker_Docker Compose_Mysql Connector - Fatal编程技术网

Node.js Docker-节点,找不到mysql模块

Node.js Docker-节点,找不到mysql模块,node.js,docker,docker-compose,mysql-connector,Node.js,Docker,Docker Compose,Mysql Connector,我正在尝试创建一个docker,其中包含node、mysql和react。但是,当我尝试导入mysql库时,出现以下错误: const express = require("express"); const router = express.Router(); const mysql = require('mysql'); 错误:找不到模块“mysql” 我已经检查了我的node_modules文件夹,那里有一个mysql目录。 这是my package.json: { "name"

我正在尝试创建一个docker,其中包含node、mysql和react。但是,当我尝试导入mysql库时,出现以下错误:

const express = require("express");
const router  = express.Router();
const mysql   = require('mysql');
错误:找不到模块“mysql”

我已经检查了我的node_modules文件夹,那里有一个mysql目录。
这是my package.json:

{
  "name": "api",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "node bin/www",
    "dev": "./node_modules/.bin/nodemon bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.3",
    "cors": "^2.8.4",
    "debug": "~2.6.9",
    "express": "~4.16.0",
    "http-errors": "~1.6.2",
    "jade": "~1.11.0",
    "morgan": "~1.9.0",
    "mysql": "^2.18.1",
    "node-mysql": "^0.4.2"
  },
  "devDependencies": {
    "nodemon": "^1.14.12"
  }
}

这是我的Dockerfile,我尝试在容器中全局安装mysql,但没有解决:

FROM mhart/alpine-node:12

WORKDIR /api

COPY package*.json /api/

RUN npm i -G nodemon
RUN npm install -G mysql
RUN npm install

COPY . /api/

EXPOSE 80

CMD ["npm", "run", "dev"]
docker-compose.yml

version: "3"
services:
    client:
        container_name: MY_api
        image: mhart/alpine-node:12
        build: ./client      
        restart: always
        ports:
            - "3000:3000"
        working_dir: /client
        volumes:
            - ./client:/client
        entrypoint: ["npm", "start"]
        links:
            - api
        networks: 
            - MY_network
    api:
        container_name: MY_client
        build: ./api
        restart: always
        ports:
            - "9000:9000"
        working_dir: /api
        volumes:
            - ./api:/api
            - /api/node_modules
        depends_on: 
            - mysqldb
        networks:
            - MY_network
    mysqldb:
        container_name: MY_mysql
        image: mysql:8.0.19
        restart: always
        ports:
            - "3307:3306"
        environment:
            - MYSQL_ROOT_PASSWORD=MY_PASS 
            - MYSQL_USER=USER
            - MYSQL_PASSWORD=MY_PASS
            - MYSQL_DATABASE=MY_DATABASE
        networks: 
            - MY_network
networks:
    MY_network:
        driver: bridge




从docker compose中删除已装入的卷
-/api/node\u模块

并删除Dockerfile中的那些行
运行npm i-G nodemon
运行npm install-G mysql


一切正常

卷:声明告诉Docker您的
节点_modules
目录包含重要的用户数据,不能修改;如果您最近已将包添加到
package.json
文件中,Docker将不会看到更新,因为旧卷优先。如果删除
docker compose.yml
文件的该部分,它将运行烘焙到图像中的代码和库树。