如何从 Spring Boot Docker 容器访问外部服务器文件夹?
Posted
技术标签:
【中文标题】如何从 Spring Boot Docker 容器访问外部服务器文件夹?【英文标题】:How to access an external server folder from a spring boot docker container? 【发布时间】:2021-01-06 07:55:51 【问题描述】:我正在使用 docker-compose 在 docker 容器中运行 spring boot 应用程序。一个spring boot使用嵌入式tomcat来运行。
服务器 (/opt/cp/uploads) 上有一个外部文件夹,其中包含我想从 Spring Boot Docker 容器访问的图像。
在 docker-compose.yaml 文件中定义了以下容器:
nginx mysql springboot-appnginx 和 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:
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何从 Spring Boot Docker 容器访问外部服务器文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Spring Boot Docker 容器连接 mysql Docker 容器
尝试从 Spring Boot Docker 容器连接到 mongo Docker 容器时验证 MongoCredential 时出错?
如何从 Docker 'run' 命令设置 Spring Boot 属性
无法从 docker 容器内的 Spring Boot 连接到 Redis