我在本地计算机上运行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
答案 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机器配置虚拟机内的端口转发。
在此配置之后,我能够使用 http:// localhost:{port}
连接到我正在运行的所有容器