首页 > 解决方案 > 如何使一个简单的 docker 服务可以从外部主机访问

问题描述

首先,我通知您,我目前是软件开发专业的学生。所以我请求你对我的问题的宽容。

我正在对接我的一个 java web 应用程序。它在我的 Windows 10 主机上运行良好,在 localhost 中连接。但是我需要让我的 Web 应用程序可以从其他主机访问,就像我在现实生活场景中所做的那样。

[编辑]:在这篇docker-compose 将 lan ip 分配给服务的帖子中,他们在 docker-compose.yml 中使用了一些网络配置。但正如我所说,我对它的理解还不够,无法适应我的情况:/

目前,我只能从运行 docker 容器的主机访问我的 Web 应用程序,网址为:“ http://localhost:8080/public/showAtlas

我想要的是我的网络应用程序可以在任何浏览器中使用如下 URL 访问:“ http://xxx.xxx.xxx.xxx:8080/public/showAtlas ”,其中 xxx.xxx.xxx.xxx 是公共 IP我可以在 dockerfile 或 docker-compose.yml 中定义的地址

这可能只需要很少的配置行还是很棘手?我想很多人会想将我的问题标记为重复,但我没有找到这个简单用例的任何简单答案。

有人可以帮我解决这个问题吗?

我查看了许多在线资源,但解决方案太“复杂”,无法适应我的情况。

我的 springboot 应用程序的 Dockerfile:

FROM store/oracle/serverjre:8
VOLUME /tmp
ADD webapp/output/webapp.jar webapp.jar
ENTRYPOINT ["java", "-jar", "webapp.jar"]

我的数据库的 Dockerfile:

FROM postgres:latest
COPY db_wtc.sql /docker-entrypoint-initdb.d/init.sql

我的 docker-compose.yml:

version: '3.7'

services:
    db-wtc:
        build:
            context: .
            dockerfile: Dockerfile-db
        container_name: cont-db-wtc
        volumes:
            - db_data:/var/lib/postgres/data
        restart: unless-stopped
        ports:
            - 5432:5432
        expose:
            - 5432
        environment:
            POSTGRES_USER: admin_wtc
            POSTGRES_PASSWORD: 123
            POSTGRES_DB: db_wtc
        networks:
            - wtc-network

    wtc:
        depends_on:
            - db-wtc
        build:
            context: .
            dockerfile: Dockerfile
        container_name: cont-wtc
        ports:
            - 8080:8080
        expose:
            - 8080
        environment:
            SPRING_DATASOURCE_USERNAME: admin_wtc
            SPRING_DATASOURCE_PASSWORD: 123
            SPRING_DATASOURCE_URL: jdbc:postgresql://db-wtc:5432/db_wtc
        networks:
            - wtc-network

networks:
    wtc-network:

volumes:
  db_data:

没有特别的错误。我只是无法从任何外部主机访问我的 docker 服务。

非常感谢你们的时间!

标签: dockerdocker-composedockerfile

解决方案


正如我从评论中得出的那样,这不是 docker-compose 问题!问题是您想从公共互联网访问您的“家庭”网络,默认情况下这是不可能的。您需要配置调制解调器以允许这样做。


推荐阅读