首頁  >  問答  >  主體

Docker 無法將同一網路中的應用程式連接在一起

我有一個docker compose文件,如下所示:

版本:“3.9”
服務:
  mysql資料庫:
    圖:mysql:5.7
    容器名稱:mysql容器
    指令: --default-authentication-plugin=mysql_native_password
    卷:
      - ./db/init.sql:/docker-entrypoint-initdb.d/0_init.sql
    連接埠:
      - 3306:3306
    暴露:
      - 3306
    環境:
      MYSQL_DATABASE:“待辦事項”
      MYSQL_USER:“管理員”
      MYSQL_PASSWORD: "密碼"
      MYSQL_ROOT_PASSWORD: "密碼"
      SERVICE_TAGS:開發
      服務名稱:mysqldb
    重新啟動:失敗時
    網路:
      - 內網
  快遞應用程式:
    容器名稱:api
    建造: 。
    圖:expressapp:1.0
    連接埠:
      - “3001:3001”
    暴露:
      - “3001”
    環境:
      DB_HOST:mysqldb
      資料庫連接埠:3306
      DB_USER:“管理員”
      DB_PASSWORD:“密碼”
      DB_NAME:待辦事項
      DB_CONNECTION_LIMIT:20
      SERVICE_TAGS:開發
      SERVICE_NAME:expressapp
      埠:3001
    依賴取決於:
      -mysql資料庫
    網路:
      - 內網
網路:
  內網:
    司機:橋
卷:
  資料庫:

如果我使用##docker compose up -d命令啟動容器並使用#ps#命令檢查正在運行的容器,我將得到以下輸出:

容器 ID 映像指令已建立狀態連接埠名稱 9f338b733a1c expressapp:1.0 "docker-entrypoint.s…" 2 分鐘前 Up 2 分鐘 0.0.0.0:3001->3001/tcp api edef8027dc0a mysql:5.7 "docker-entrypoint.s…" 2 分鐘前 Up 2 分鐘 0.0.0.0:3306->3306/tcp, 33060/tcp mysqlcontainer
但是當我嘗試向伺服器發布

API請求時,我收到以下錯誤訊息:

“處理您的要求時發生錯誤:連接 ECONNREFUSED 172.24.0.2:3306”
為什麼是因為我將

DB_HOST變數設定為mysql服務名稱?

P粉627136450P粉627136450235 天前318

全部回覆(1)我來回復

  • P粉293550575

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

    出現此問題的原因可能是 expressappmysql 可用於查詢之前啟動。

    要控制服務啟動順序,您可以將 healthcheck 新增到 mysqldb 服務:

    healthcheck:
          test: mysql ${MYSQL_DATABASE} --user=${MYSQL_USER} --password='${MYSQL_PASSWORD}' --silent --execute "SELECT 1;"
          interval: 30s
          timeout: 10s
          retries: 5

    depends_on 區塊到 expressapp

    #depends_on:
          mysqldb:
            condition: service_healthy

    查看完整範例此處

    #有關此內容的更多信息,請參閱此答案

    回覆
    0
  • 取消回覆