【问题标题】:How to access an external server folder from a spring boot docker container?如何从 Spring Boot Docker 容器访问外部服务器文件夹?
【发布时间】:2021-01-06 07:55:51
【问题描述】:

我正在使用 docker-composedocker 容器中运行 spring boot 应用程序。一个spring boot使用嵌入式tomcat来运行。

服务器 (/opt/cp/uploads) 上有一个外部文件夹,其中包含我想从 Spring Boot Docker 容器访问的图像。

docker-compose.yaml 文件中定义了以下容器:

  • nginx
  • mysql
  • springboot-app

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

使用 tomcat 这是在 server.xml 中完成的:

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

但是这个选项显然不能通过带有嵌入式 tomcat 的 application.properties 获得。

这是怎么来的?

我的 docker-compose.yaml:

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: {
    }

【问题讨论】:

    标签: spring-boot docker tomcat docker-compose contextpath


    【解决方案1】:

    实际上,这个选项可以通过 application.properties 和嵌入式 tomcat 获得:

    spring.mvc.static-path-pattern=/uploads/**
    spring.resources.static-locations=file:/opt/uploads
    

    【讨论】:

      【解决方案2】:

      也许更好地将 Tomcat 用于 docker 映像而不是 OpenJDK。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-26
        相关资源
        最近更新 更多