首页 文章

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

提问于
浏览
1

我在本地机器上运行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 回答

  • 1

    HTTP是一种基于TCP的协议,因此如果Docker通过TCP公开端口(而不是UDP,另一种选择),那么您可以通过HTTP连接到该端口, provided something that speaks HTTP is listening on that port inside the container.

    因此,如果您无法使用上述撰写文件连接到http://localhost:8080,这可能意味着 keycloak 服务要么没有收听,要么说是HTTP因为某些其他原因而拒绝连接 .

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

  • 0

    看来端口暴露是通过http:// 连接到docker机器,并且能够通过localhost连接到它,需要在虚拟机中配置端口转发 .

    Local virtual machine ports forwarding

    在这个配置之后,我能够使用http:// localhost:连接到我所有正在运行的容器

相关问题