docker - 如何使一个简单的 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 服务。
非常感谢你们的时间!
解决方案
正如我从评论中得出的那样,这不是 docker-compose 问题!问题是您想从公共互联网访问您的“家庭”网络,默认情况下这是不可能的。您需要配置调制解调器以允许这样做。
推荐阅读
- shell - 如何从 Docker 容器中禁用和启用互联网连接?
- html - 为什么谷歌浏览器无法在 SVG 中正确显示文本标签?
- javascript - Vuejs - 在同一个组件中获取不同的日期
- python - 如何在 Python 中使海龟的形状成为图像?
- javascript - results.text.slice(0,3) 中的 Cordova BarcodeScan 不起作用
- css - 视网膜屏幕上的 Bootstrap 4 网格系统
- sap - SAP Fiori 组名称更改未反映在 Qulaity 系统的 Fiori Launchpad 中
- javascript - 如何在 JavaScript 中创建“多深度”选择
- javascript - 如何同时检查两个不同的事件
- shell - gitlab-runner 无法使用`pyenv,pip,...`