mysql - Docker NodeJS 与 MySQL 连接 ECONNREFUSED 127.0.0.1:8000
问题描述
我有 2 个容器,即 mysql 和 nodejs。但是,我的nodejs和mysql之间的连接似乎没有连接。错误是
connect ECONNREFUSED 127.0.0.1:8000
我的 server.js 文件
//Connection with database
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
port: "8000",
user: "root",
password: "root",
database: "justcall"
});
con.connect(function(err){
if(err){
console.log('Database connection error: ' + err.message);
}else{
console.log('Database connection successful');
}
});
我的 nodejs 的 Dockerfile
FROM node:12
RUN useradd -ms /bin/bash admin
WORKDIR /app
COPY . /app
RUN chown -R admin:admin /app
RUN chmod 755 /app
USER admin
CMD npm start
EXPOSE 4443
docker build -t nodejs:signalingserver2
我使用运行容器
docker run -p 4443:4443 nodejs:signalingserver2
我的 mysql docker-compose 是
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql-server-80
# command: --default-authentication-plugin=msql_native_password
# working dir: /application
volumes:
- .:/application
restart: always
ports:
- '3306:3306'
expose:
- '3306'
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=mydb
- MYSQL_USER=root
- MYSQL_PASSWORD=root
phpmyadmin:
depends_on:
- mysql
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
ports:
- "8080:80"
links:
- mysql
environment:
PMA_HOSTS: mysql
php:
container_name: php
image: php:php_img
build:
context: ./
volumes:
- /root/app/xampp/justcall:/var/www/html
ports:
- 8000:80
depends_on:
- mysql
restart: always
问题是每次我运行我的 nodejs 服务器时,它都会出现一个错误,即 ECONNREFUSED
解决方案
您正在尝试连接 php-myadmin,而不是 MySQL。
尝试将您的连接更改为
//Connection with database
var mysql = require('mysql');
var con = mysql.createConnection({
host: "mysql",
port: "3306",
user: "root",
password: "root",
database: "mydb"
});
此外,将 nodejs 容器添加到 docker-compose 或在 nodejs 容器和 MySQL 容器之间添加旧链接。使用localhost
时指的是node容器的localhost,所以需要使用docker-networking从nodejs容器连接DB容器。检查服务到服务的通信。
docker run -it --link mysql -p 4443:4443 nodejs:signalingserver2
另外,取消注释command: --default-authentication-plugin=msql_native_password
,mysql 8 不支持普通身份验证。
使用 docker-compose 可以
version: '3'
services:
mysql:
image: mysql:8.0
command: --default-authentication-plugin=msql_native_password
ports:
- '3306:3306'
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=mydb
- MYSQL_USER=root
- MYSQL_PASSWORD=root
nodejs:
image: nodejs:signalingserver2
ports:
- '4443:4443'
推荐阅读
- react-native - 解决没有为提供的活动注册的本机启动画面
- php - PHP 中的 Geotiff 操作
- mysql - CASE..ELSE 将为未使用的表达式占用额外的内存
- javascript - 根据模型/接口限制对象数组的对象值?
- javascript - 表单提交结束时的 Mvc 核心隐藏加载器
- laravel - cPanel 上的背包 Laravel:后端配置无效。可读卷不可用
- php - 需要在 CURLOPT_POSTFIELDS 中传递动态值
- reactjs - 加载 ag-grid 服务器端模型时需要应用以前保存的过滤器/排序模型
- python - 我正在尝试在报告的表格中正确地创建一个块行
- javafx - 覆盖 JavaFx TreeItem getChildren 是否添加了一个好主意?