簡體   English   中英

Docker compose無法訪問其他容器的端口

[英]Docker compose can't access ports of other containers

我有 2 個使用 docker 組合運行的容器。 其中一個容器正在執行 shell 腳本,該腳本應檢查另一個容器是否已經啟動並在端口 9990 上運行。

即使容器正在啟動,shell 腳本也沒有回應。

   keycloak:
      image: jboss/keycloak:latest
      volumes: 
        - ./imports/cache_reload/disable-theme-cache.cli:/opt/jboss/startup-scripts/disable-theme-cache.cli
        - ./imports/themes/custom/:/opt/jboss/keycloak/themes/custom-theme/
        - ./imports/realm/realm-export.json:/opt/jboss/realms/custom-import.json
      environment:
        DB_VENDOR: MYSQL
        DB_ADDR: mysql
        DB_DATABASE: keycloak
        DB_USER: keycloak
        DB_PASSWORD: password
        KEYCLOAK_USER: admin
        KEYCLOAK_PASSWORD: Pa55w0rd
      ports:
        - 8080:8080
      depends_on:
        - mysql
  keycloak_installer:
    image: solr:6.6-alpine
    volumes:
      - ./imports/scripts/import-realm.sh:/docker-entrypoint-initdb.d/init.sh
    depends_on: 
      - keycloak

shell 腳本如下:

echo "MOIN LEUDE TRYMACS HIER!"

while ! nc -z localhost 9990; do
    sleep 1
    echo "Waiting for keycloak server startup 9990..."

    echo "$(nc -z localhost 9990)"
done

打印了第一個回聲,但隨后沒有打印任何其他內容。

容器 keycloak 在端口 9990 上運行。

請幫忙,謝謝

您必須在 docker compose 中了解有關網絡的更多詳細信息

要解決您的問題,您需要:

  1. 在每個容器的 docker 組合文件中添加網絡(有一個默認網絡,但要了解該機制,您可以明確定義它)。 對於第一個容器(名為keycloak ),這必須看起來像這樣(例如在端口下):
     ports:
       - 8080:8080  
     networks:
       - keycloak_network

在第二個容器(名為keycloak_installer )上(您必須在第一個容器中公開要請求的端口):

    depends_on: 
      - keycloak
    networks:
      - keycloak_network
  1. 在您的腳本調用中,網絡現在可以使用第二個容器。 您必須通過以下方式更改您的代碼:
    nc -z keycloak_installer 9990

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM