2017-05-19 59 views
2

我在本地機器上運行postgres和keycloak圖像。這兩個圖像都配置了暴露的端口。但碼頭機只能通過TCP公開端口。所以我可以通過TCP連接到postgres,但無法通過HTTP連接到keycloack的localhost:8080。是否可以使用docker-compose公開http端口?

所以有可能通過HTTP連接到Docker暴露端口。

搬運工-compose.yml

postgres: 
image: postgres:9.6.3 
volumes: 
    - ./db/init:/docker-entrypoint-initdb.d 
environment: 
    - POSTGRES_USER=root 
    - POSTGRES_PASSWORD=root 
ports: 
    - 5432:5432 

keycloak: 
image: jboss/keycloak-postgres 
environment: 
    - KEYCLOAK_LOGLEVEL=DEBUG 
    - POSTGRES_DATABASE=user-service 
    - POSTGRES_USER=root 
    - POSTGRES_PASSWORD=root 
links: 
    - postgres:postgres 
ports: 
    - "8080:8080" 
    - "9999:9990" 
    - "443:8443" 
volumes: 
    - ./data:/data 

docker ps

回答

1

看起來端口暴露是通過http:// {docker-machine-ip}:{port}連接到碼頭機,並且能夠通過localhost連接到它,需要配置端口轉發在虛擬機內。

Local virtual machine ports forwarding

此配置後,我能夠與HTTP連接到我的所有正在運行的容器://本地主機:(港口)

1

HTTP是在TCP上騎協議,因此,如果暴露多克爾經由TCP端口(相對於UDP,其他選項) ,那麼你可以通過HTTP連接到該端口,提供的東西說HTTP正在監聽該容器內的端口。

所以,如果你不能與上述撰寫文件連接到http://localhost:8080,這可能意味着,keycloak服務或者不具有任何偵聽端口8080的容器內,或者其他的聆聽不說話HTTP,或者無論是聽還是說HTTP都會因其他原因拒絕連接。

要完全排除問題出在端口映射或主機上的某些問題,請跳至容器內部(使用docker exec)並嘗試從內部連接到8080;如果你不能,那麼你已經確認問題是在容器內運行的任何東西,而不是與Docker相關的任何東西。

+0

感謝您的回答。我能夠從容器內部連接到8080。此外,我可以使用碼頭機IP連接到它,即192.168.99.100:8080,但不是localhost:8080 ...所以我想這個問題是在端口暴露/重定向。 –

相關問題