spring-boot - 如何从 Spring Boot Docker 容器访问外部服务器文件夹?
问题描述
我正在使用docker-compose在docker容器内运行spring boot 应用程序。Spring Boot 使用嵌入式 tomcat运行。
服务器上有一个外部文件夹(/opt/cp/uploads),其中包含我想从 Spring Boot Docker 容器访问的图像。
在docker-compose.yaml文件中定义了以下容器:
- nginx
- mysql
- springboot-应用程序
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: {
}
解决方案
也许更好地将 Tomcat 用于 docker 映像而不是 OpenJDK。
这样您就可以为外部路径设置 Tomcat 配置
看看这里:https ://medium.com/@iamvickyav/deploying-spring-boot-war-in-tomcat-based-docker-2b689b206496
推荐阅读
- sql-injection - SQL注入应该做什么?
- arrays - 如果数组中有两个最大差异,我如何打印具有最大差异的相邻元素
- gltf - 可以使用 gltf-transform 从 GLTF 中删除隐藏的纹理吗?
- delphi - 使用 CoCreateInstance 方法创建单词时,使用 /Automation 开关创建单词实例
- android - 每当我在 Kotlin 中用 textChangedListner 中断它时,我想停止我的函数执行,该函数是在延迟后编写的
- reactjs - React Modal我希望能够在垂直长时滚动模态
- r - 根据是否存在来自另一列的字符串元素过滤行
- python-3.x - 计算熊猫中的列对之间的共现
- python - 用于标记 x 轴的重复项
- javascript - 检查一个字符串的结尾是否与另一个字符串的开头匹配