Rumah > Soal Jawab > teks badan
Saya mempunyai fail karang docker yang kelihatan seperti ini:
version: "3.9" services: mysqldb: image: mysql:5.7 container_name: mysqlcontainer command: --default-authentication-plugin=mysql_native_password volumes: - ./db/init.sql:/docker-entrypoint-initdb.d/0_init.sql ports: - 3306:3306 expose: - 3306 environment: MYSQL_DATABASE: "todos" MYSQL_USER: "admin" MYSQL_PASSWORD: "password" MYSQL_ROOT_PASSWORD: "password" SERVICE_TAGS: dev SERVICE_NAME: mysqldb restart: on-failure networks: - internalnet expressapp: container_name: api build: . image: expressapp:1.0 ports: - "3001:3001" expose: - "3001" environment: DB_HOST: mysqldb DB_PORT: 3306 DB_USER: "admin" DB_PASSWORD: "password" DB_NAME: todos DB_CONNECTION_LIMIT: 20 SERVICE_TAGS: dev SERVICE_NAME: expressapp PORT: 3001 depends_on: - mysqldb networks: - internalnet networks: internalnet: driver: bridge volumes: database:
Jika saya menyemak bekas yang sedang berjalan menggunakan arahan docker compose up -d
命令启动容器并使用 ps
, saya mendapat output berikut:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f338b733a1c expressapp:1.0 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3001->3001/tcp api edef8027dc0a mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlcontainer
Tetapi apabila saya cuba membuat permintaan API
kepada pelayan, saya mendapat mesej ralat berikut:
"There was an error processing your request: connect ECONNREFUSED 172.24.0.2:3306"
Kenapa sebab saya tukar DB_HOST
变量设置为 mysql
nama servis?
P粉2935505752024-02-27 19:47:11
Isu ini mungkin berlaku kerana expressapp
在 mysql
dimulakan sebelum pertanyaan tersedia.
Untuk mengawal susunan perkhidmatan dimulakan, anda boleh healthcheck
添加到 mysqldb
Perkhidmatan:
healthcheck: test: mysql ${MYSQL_DATABASE} --user=${MYSQL_USER} --password='${MYSQL_PASSWORD}' --silent --execute "SELECT 1;" interval: 30s timeout: 10s retries: 5
dan depends_on
块到 expressapp
depends_on: mysqldb: condition: service_healthy
Lihat contoh penuh di sini
Untuk maklumat lanjut tentang ini, lihat ini jawapan.