[英]How to solve docker-compose docker mysql ECONNREFUSED?
我有以下 docker 撰写:
services:
server:
container_name: server
build:
context: ./BE
dockerfile: ./Dockerfile.prod
depends_on:
- mysql
environment:
MYSQL_HOST_IP: mysql
ports:
- 4000:4000
links:
- mysql
mysql:
image: mysql:latest
container_name: mysqldb
cap_add:
- SYS_NICE # CAP_SYS_NICE
# container_name: my_very_special_server
ports:
- 3307:3306
volumes:
- ./DbScripts/DumpTodoOnly.sql:/docker-entrypoint-initdb.d/DumpTodoOnly.sql
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_DATABASE: todo
MYSQL_ROOT_PASSWORD: password!
MYSQL_PASSWORD: password!
healthcheck:
test: "mysql -uroot -p$MYSQL_ROOT_PASSWORD content -e 'select 1'"
interval: 1s
retries: 120
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: dev_pma
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3307
PMA_ARBITRARY: 1
restart: always
ports:
- 8183:80
client:
container_name: FE
build:
context: ./FE
dockerfile: ./Dockerfile.prod
ports:
- 3000:3000
environment:
- CHOKIDAR_USEPOLLING=true
tty: true
volumes:
db_data:
当我运行时: docker-compose up -d --build
一切都没有错误。
我访问我的 php 管理员:http://localhost:8183/index.php?route=/&route=%2F
我可以看到我的两个表已创建:
问题:
在服务器上我有一条路线 http://localhost:4000/api/create
它基本上接受了一个 body 参数,该参数应该将一个 todo 添加到 todos 表中。
但是当使用 postman 我得到:
{
"status": "error",
"statusCode": 500,
"message": {
"errno": "ECONNREFUSED",
"code": "ECONNREFUSED",
"syscall": "connect",
"address": "127.0.0.1",
"port": 3306,
"fatal": true
}
}
我认为 ny db image 没有及时构建,所以我在 compose 文件中添加了一个 healtcheck:
healthcheck:
test: "mysql -uroot -p$MYSQL_ROOT_PASSWORD content -e 'select 1'"
interval: 1s
retries: 120
在服务器图像上:
depends_on:
mysql:
condition: service_healthy
但是当我想构建我得到的撰写文件时:
错误:服务器容器“a7916ff588af”不健康。 启动项目时遇到错误
我错过了什么?
花了我一段时间来更新这个问题。
@Phil 是对的。 我需要在 node express 中的 sql 配置中添加图像名称,而不是 ip。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.