Docker tidak boleh menyambungkan aplikasi bersama dalam rangkaian yang sama
P粉627136450
P粉627136450 2024-02-26 20:53:13
0
1
375

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粉627136450
P粉627136450

membalas semua(1)
P粉293550575

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan