如何使外部主机可以访问简单的docker服务

时间:2019-09-17 17:31:42

标签: docker docker-compose dockerfile

首先,我通知您,我目前是软件开发的学生。因此,我恳求您对我的问题持宽容态度。

我正在码头化我的Java Web应用程序之一。在我的Windows 10主机(在localhost上连接)上运行正常。 但是我需要使我的Web应用程序可以从其他主机访问,就像在现实生活中那样。

[编辑] :在本文docker-compose assign lan ip to service中,他们在docker-compose.yml中使用了一些网络配置。但是正如我所说,我对它的理解不足以适应我的情况:/

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

我想在任何浏览器中使用以下网址访问我的Web应用程序:“ http://xxx.xxx.xxx.xxx:8080/public/showAtlas”,其中xxx.xxx.xxx.xxx是我可以在dockerfile中定义的公共IP地址或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服务。

谢谢你们为您准备的时间!

3 个答案:

答案 0 :(得分:1)

正如我从评论中得出的那样,这不是docker-compose问题!问题是您希望默认情况下无法从公共Internet访问“家庭”网络。您需要配置调制解调器以允许此操作。

答案 1 :(得分:0)

一种替代方法可能是使用隧道。如果您不打算部署生产,请尝试使用ngrok。 (https://ngrok.com/

您要做的就是安装ngrok并运行

$ ngrok http 8080

它将为您提供一个可以临时使用的地址。

答案 2 :(得分:0)

实际上,这只是我的家庭网络造成的问题。 我租用了一个vps,使用vps的IP,它像一种魅力一样工作。 我不需要更改上述docker文件中的任何内容。 谢谢大家!