当前位置: 首页 > 知识库问答 >
问题:

如何从Spring引导docker容器访问外部服务器文件夹?

贺宏富
2023-03-14

我使用docker compose在docker容器中运行spring boot应用程序。spring boot使用嵌入式tomcat运行。

服务器上有一个带有图像的外部文件夹,我想从一个Spring引导docker容器中访问该文件夹。

在码头工人的房间里。yaml文件定义了以下容器:

  • nginx
  • mysql
  • springboot应用程序

nginx和CloudFlare将域重定向到端口8080上的spring应用程序。我想访问这样的图像:https://domainname.com/uploads/imageName.png

使用tomcat,这是在服务器上完成的。xml:

<Context docBase="/opt/uploads" path="/uploads"/>

但这个选项显然不能通过应用程序使用。嵌入tomcat的属性。

这是怎么来的?

我的码头工人。亚马尔:

version: '3.8'
services:
  nginx:
    container_name: some-nginx
    hostname: nginx
    image: nginx:1.19.2-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    restart: unless-stopped
    network_mode: host
  mysqldb:
    image: mysql:8.0.20
    hostname: mysqldb
    container_name: cp-mysqldb
    environment:
      - MYSQL_ROOT_PASSWORD=pass1234
      - MYSQL_DATABASE=db_name
      - MYSQL_USER=root
      - MYSQL_PASSWORD=pass1234
    ports:
      - "3306:3306"
    volumes:
      - cp-mysqldb-data:/opt/mysql
    restart: unless-stopped
  springboot-app:
    image: openjdk:8
    hostname: cp
    container_name: cp-springboot
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysqldb:3306/db_name?autoReconnect=true&useSSL=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    ports:
      - "8080:8080"
    depends_on:
      - mysqldb
    volumes:
      - cp-springboot-data:/opt/cp
      - ./target/cp-springboot-0.0.1-SNAPSHOT.war:/ROOT.war
    command: ["java", "-jar",
              "-Dspring.profiles.active=prod",
              "ROOT.war"]
    restart: always
  
volumes:
  cp-springboot-data: {
    }
  cp-mysqldb-data: {
    }

共有2个答案

房育
2023-03-14

实际上,这个选项可以通过应用程序使用。嵌入tomcat的属性:

spring.mvc.static-path-pattern=/uploads/**
spring.resources.static-locations=file:/opt/uploads
柴寂离
2023-03-14

也许最好使用Tomcat处理docker映像,而不是OpenJDK。

这样,就可以为外部路径设置Tomcat配置

看看这里:https://medium.com/@iamvickyav/deploying-spring-boot-war-in-tomcat-based-docker-2b689b206496

 类似资料:
  • 问题内容: 我正在boot2docker 1.3.1下运行。 我有一个Docker容器通过运行Web服务器。 如果我连接到该容器,则可以使用浏览该网站,以便知道服务器正在运行。 我用以下容器运行容器: 它具有以下详细信息: 我以为可以访问,从托管人访问该网站。 这是行不通的。我只是在Chrome中看到“正在连接…”,却一无所获。 我究竟做错了什么? 问题答案: 好吧,愚蠢的我,我在boot2doc

  • 如何从Windows文件资源管理器访问Docker containers文件夹和文件?

  • 问题内容: 我想阻止从外部直接访问docker容器。我使用haproxy,并且只希望访问端口80、443。 我在iptables中添加了以下规则。但是我仍然可以通过不同的端口访问Docker容器。 这可能是由于DOCKER链 我需要创建什么规则来阻止直接访问? 问题答案: 您可以使用命令创建一个网络来连接应用程序和代理,而不必使用IP表来执行此操作。另外,请勿在任何端口上公开应用程序。您应该公开的

  • 问题内容: 我运行基于节点映像的Docker容器(Windows的Docker快速入门终端) 我启动节点客户端(在端口3000上)和节点(基于Express)的服务器(在3009 端口上)。客户端通过AJAX调用访问REST服务器。 它可以完美地从主机运行(客户端访问localhost:3009并返回结果)。我可以拨打:3009,然后再次得到正确的结果。 但是当我构建并运行docker image

  • tl;如果在Docker容器中运行,一个RestController正确回答,另一个则不正确。 该服务有两个API 和。 它们都是通过docker compose运行的。 返回。 返回一个空的200响应。正如预期的那样。 应该返回一个200响应和一个每次调用API时都会增加的数字。可悲的是,事实并非如此。 在本地运行该服务可以提供预期的结果。 maven spotify插件用于从以下创建图像。 我

  • 问题内容: 我按照此处的说明使用内置Web服务器运行Django,并能够使用成功运行它python manage.py runserver。如果我从Web服务器本地访问127.0.0.1:port,则将显示Django页面,表明它可以正常工作。 我意识到Django网络服务器不是生产服务器,但是对于我来说,测试的重要之处在于能够从外界访问它-即,不是从服务器上的Web浏览器而是从另一台计算机访问它