[英]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.