2017-05-19 29 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 ...所以我想这个问题是在端口暴露/重定向。 –

相关问题