这是我的db.js文件
let connection = mysql.createConnection({
host: process.env.DATABASE_HOST || '127.0.0.1',
user: 'root',
database: 'bc2k19',
password: 'joeydash',
port: 33060
});
这是我的docker-compose.yml文件
version: '3.2'
services:
app:
build: ./app
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_HOST=db
db:
build: ./db
ports:
- "3306:3306"
这是我的mysql的dockerfile
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD joeydash
ENV MYSQL_DATABASE bc2k19
ENV MYSQL_USER joeydash
ENV MYSQL_PASSWORD joeydash
ADD setup.sql /docker-entrypoint-initdb.d
这是我的应用程序的dockerfile
# Use Node v4 as the base
image.
FROM node:latest
# Add everything in the current directory to our image, in the 'app' folder.
ADD . /app
# Install dependencies
RUN cd /app; \
npm install --production
# Expose our server port.
EXPOSE 3000
# Run our app.
CMD ["node", "/app/bin/www"]
我不知道为什么每次尝试做docker-compose up并连接时都会显示
Error: connect ECONNREFUSED 127.0.0.1:3306
app_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
像未设置连接但已设置的鞋子
答案 0 :(得分:2)
这里发生了三件事:
db.js
)中的端口号有错字。
33060
更改为3306
root
,但环境中的用户是joeydash
root
更改为joeydash
localhost
中,大部分时间(如果并非总是指向容器内部)。要修复第二点,您应该检查bind
部分的mysql配置。 (寻找bind-address
)确保它允许您运行其他容器的ip连接。
- 如果MySQL绑定到127.0.0.1,则 同一台计算机上只有软件 将能够连接(因为 127.0.0.1始终是本地计算机)。
- 如果MySQL绑定到 192.168.0.2(并且服务器计算机的IP地址为 192.168.0.2,并且它位于/ 24子网中),那么同一台计算机上的所有计算机 子网(以192.168.0开头的任何子网)都可以连接。
- 如果MySQL绑定到 0.0.0.0,那么任何能够访问服务器计算机的计算机 通过网络将能够连接。
从这里https://stackoverflow.com/a/3552946/2724940
报价如果我们经历每种情况:
localhost
my.cnf(位于/etc/mysql/my.cnf
[mysqld]
bind-address = 0.0.0.0
答案 1 :(得分:1)
根据您的docker compose版本,您可能需要创建网络或链接容器。
在docker-compose.yml
的末尾,您可以添加:
networks:
backend:
driver: 'bridge'
然后为每个容器添加:
networks:
- backend