首页 > 解决方案 > 使用network_mode时如何访问在容器中运行的网站:主机

问题描述

我有一个非常棘手的话题,因为我需要访问 AWS 中的私有数据库。为了连接到这个数据库,首先我需要创建一个这样的桥:

ssh -L 127.0.0.1:LOCAL_PORT:DB_URL:PORT -N -J ACCOUNT@EMAIL.DOMAIN -i ~/KEY_LOCATION/KEY_NAME.pem PC_USER@PC_ADDRESS

通过127.0.0.1:LOCAL_PORT:DB_URL我可以连接到我的 Java 应用程序中的数据库。假设这种情况下的端口是 9991。

我的 docker 文件或多或少看起来像这样:

码头工人-compose.yml

version: '3.4'
services:
  api:
    image: fanmixco/example:v0.01
    build:
      context: .
    network_mode: host
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:9991/MY_DB

Dockerfile

FROM openjdk:11
RUN mkdir /home/app/
WORKDIR /home/app/
RUN mkdir logs
COPY ./target/MY_JAVA_APP.jar .

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "MY_JAVA_APP.jar"]

图像运行正常。但是,如果我尝试:

我想知道如何测试我的应用程序。我知道它正在运行,因为我在控制台中收到一条成功消息,并且新数据已添加到数据库中,但我不知道如何测试或访问它。知道正确的方法吗?谢谢。

PS:

  1. 我在 Docker Desktop for Windows 中运行我的图像。

  2. 我有另一个使用 tomcat 9 并正在运行的案例CMD ["catalina.sh", "run"],我知道它正在工作,因为我在控制台中收到此消息:

INFO [main] org.apache.catalina.startup.Catalina.start 服务器在 [9905] 毫秒内启动

但我无法再次访问它。

标签: dockerdocker-networkingdocker-desktop

解决方案


根据上述信息,我不确定问题出在哪里,因为我无法在自己的机器上复制系统。

但是,这些是一些值得关注的地方:

  • 您可能会遇到与此类似的问题:https ://github.com/docker/for-mac/issues/1031因为您正在使用的网络魔法ssh和 AWS DB

  • 您应该尝试指定构建/Dockerfile或图像,并避免同时指定

      version: '3.4'
      services:
        api:
          image: fanmixco/example:v0.01 # choose using an image
          build:                        # or building from a Dockerfile
            context: .                  # but not both
          network_mode: host
          environment:
            - SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:9991/MY_DB
    

希望有帮助,祝你好运


推荐阅读