Rumah  >  Soal Jawab  >  teks badan

Docker tidak boleh menyambungkan aplikasi bersama dalam rangkaian yang sama

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粉627136450P粉627136450235 hari yang lalu316

membalas semua(1)saya akan balas

  • P粉293550575

    P粉2935505752024-02-27 19:47:11

    Isu ini mungkin berlaku kerana expressappmysql 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.

    balas
    0
  • Batalbalas