错误数据库连接不是 docker 中 Mysql 的 Nodejs 函数
Error database connect is not a function Nodejs with Mysql in docker
我已经部署了我的 docker 应用程序(到 DigitalOcean)。一切正常,但我无法将 mysql 与 nodejs 连接。
当我 运行 docker-compose up
我得到错误 database.connect is not a function.
我的 server.js 文件是这样的
const mysql = require("mysql");
const database = mysql.createPool({
host: process.env.MYSQL_HOST_IP,
user: "db_user",
password: "db_user_pass",
database: "guess-game",
port: 3306,
});
database.connect((err) => {
if (err) {
console.error("error connecting: " + err.stack);
return;
}
console.log("connected as id " + db.threadId);
});
module.exports = db;
我不知道我需要写什么才能让它工作。
host: process.env.MYSQL_HOST_IP,
我尝试将 Droplet IP 添加为主机,但这也不行。
host: "http://46.101.162.111/",
另外,我试试这个。
host: "46.101.162.111",
我的docker-compose.yml文件
version: "3"
networks:
dbnet:
services:
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin1
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
restart: always
links:
- db
ports:
- 8899:80
depends_on:
- db
networks:
- dbnet
api:
build: ./api
container_name: api1
command: npm run start
restart: unless-stopped
ports:
- "3005:3005"
environment:
- PORT=3005
- MYSQL_HOST_IP=172.18.0.2
depends_on:
- phpmyadmin
networks:
- dbnet
db:
image: mysql:latest
container_name: db
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=my_secret_password
- MYSQL_DATABASE=guess-game
- MYSQL_USER=db_user
- MYSQL_PASSWORD=db_user_pass
restart: always
ports:
- 6033:3306
networks:
- dbnet
挣扎了将近3天。
您只需要指定一个数据库容器名称而不是像这样的 IP:
MYSQL_HOST_IP=db
我已经部署了我的 docker 应用程序(到 DigitalOcean)。一切正常,但我无法将 mysql 与 nodejs 连接。
当我 运行 docker-compose up
我得到错误 database.connect is not a function.
我的 server.js 文件是这样的
const mysql = require("mysql");
const database = mysql.createPool({
host: process.env.MYSQL_HOST_IP,
user: "db_user",
password: "db_user_pass",
database: "guess-game",
port: 3306,
});
database.connect((err) => {
if (err) {
console.error("error connecting: " + err.stack);
return;
}
console.log("connected as id " + db.threadId);
});
module.exports = db;
我不知道我需要写什么才能让它工作。
host: process.env.MYSQL_HOST_IP,
我尝试将 Droplet IP 添加为主机,但这也不行。
host: "http://46.101.162.111/",
另外,我试试这个。
host: "46.101.162.111",
我的docker-compose.yml文件
version: "3"
networks:
dbnet:
services:
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin1
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
restart: always
links:
- db
ports:
- 8899:80
depends_on:
- db
networks:
- dbnet
api:
build: ./api
container_name: api1
command: npm run start
restart: unless-stopped
ports:
- "3005:3005"
environment:
- PORT=3005
- MYSQL_HOST_IP=172.18.0.2
depends_on:
- phpmyadmin
networks:
- dbnet
db:
image: mysql:latest
container_name: db
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=my_secret_password
- MYSQL_DATABASE=guess-game
- MYSQL_USER=db_user
- MYSQL_PASSWORD=db_user_pass
restart: always
ports:
- 6033:3306
networks:
- dbnet
挣扎了将近3天。
您只需要指定一个数据库容器名称而不是像这样的 IP:
MYSQL_HOST_IP=db