以前使用FTP在Linux中使用java -jar xxx.jar部署SpringBoot项目时,由于在项目中指定了主机文件存放路径映射,可以直接访问服务器的文件。

但是最近入坑Docker,将SpringBoot项目加载成镜像后部署在Docker中运行,但是出现了一个问题,就是Docker无法识别宿主机的文件路径,所以部署在Docker容器里的web项目也就无法访问原来已经上传好的图片和新上传的图片,弄了一个晚上终于解决了这个问题!按照步骤一步一步操作可完美解决这个问题!

一、解决办法

1. 把容器中图片存放目录挂载到宿主机上图片存放目录

一般两个路径设置为相同的就不会出现问题

# 参数解释:
# 挂载目录-v {宿主机的文件存放目录绝对路径}:{容器中的文件存放目录绝对路径}
# 端口映射-p {宿主机的端口}:{容器暴露的端口}
# 容器名--name {容器名字}
docker run -p 8080:8080 -v /usr/turing/test/static/img:/usr/turing/test/static/img --name turing-jpa turing-jpa 

2. 把SpringBoot项目部署到Docker中运行

3. 将宿主机上的文件拷贝到容器中(路径要匹配挂载规则)

假设宿主机上的图片保存在/usr/turing/img/下,那么文件也要拷贝到容器中的/usr/turing/img/下

# docker cp {宿主机文件存放目录} {容器ID}:{容器中文件存放目录}
docker cp /usr/turing/img/ e0e149badb6e:/usr/turing/img/

然后就可以访问图片了,上传图片时也需要遵循挂载规则,保存文件目录的绝对路径要和容器的文件存放目录绝对路径最好保持一致,一定不会出错!

二、IDEA操作Docker挂载目录

最后放上一张更新图片成功的图!

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐