是否可以使用docker-compose公开http端口?

时间:2017-05-19 15:04:26

标签: docker docker-compose

我在本地计算机上运行postgres和keycloak图像。这两个图像都配置了暴露的端口。但是docker机器只通过TCP暴露端口。所以我能够通过TCP连接到postgres,但是无法通过HTTP连接到keycloack的localhost:8080。

因此可以通过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

2 个答案:

答案 0 :(得分:1)

HTTP是一种搭载在TCP之上的协议,因此如果Docker通过TCP公开端口(而不是UDP,另一种选择),那么您可以通过HTTP连接到该端口,提供了说话的内容HTTP正在侦听容器内的端口。

因此,如果您无法使用上述撰写文件连接到http://localhost:8080,这可能意味着keycloak服务要么没有监听容器内的端口8080,要么听什么不会说HTTP,或任何正在倾听和说话的HTTP由于某些其他原因拒绝连接。

要完全排除问题在于端口映射或主机上的某些内容,请在容器内跳转(使用docker exec)并尝试从内部连接到8080;如果你不能,那么你已经确认问题在于容器内运行的是什么,而不是与Docker相关的任何东西。

答案 1 :(得分:0)

端口暴露似乎是通过 http:// {docker-machine-ip}:{port} 连接到docker机器,并且能够通过localhost连接到docker机器配置虚拟机内的端口转发。

Local virtual machine ports forwarding

在此配置之后,我能够使用 http:// localhost:{port}

连接到我正在运行的所有容器