【问题标题】:File Upload by docker container通过 docker 容器上传文件
【发布时间】:2018-10-12 11:32:32
【问题描述】:

我有一个 Spring Boot 应用程序。 Docker 容器无权创建文件。

码头文件:

FROM openjdk:8-jdk-alpine

VOLUME /tmp

ADD /build/libs/file-upload-service-2.0.0.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

图像构建命令:

docker build -t file-upload-service .

图像运行命令:

docker run -d --name file-upload-service -p 9104:9104 file-upload-service:latest

文件夹权限:

sudo chown -R  root:docker  /home/storage/

sudo chmod -R 777 /home/storage/

当使用java -jar 运行时,应用程序可以创建文件。

【问题讨论】:

  • 尝试创建文件/文件夹时遇到什么异常?
  • 文件文件=新文件(路径); file.canWrite() 返回 false
  • path 变量的值是多少?是/home/storage吗?
  • /home/storage/sajib.png
  • 好的。您希望从您的主机中获取此文件。然而,代码正试图在 docker 容器中找到该文件。您必须挂载主机卷才能使其工作。

标签: docker spring-boot dockerfile


【解决方案1】:

问题

您希望 docker 容器中的代码能够在主机的文件系统中找到一个文件。一个 docker 容器是完全包含(顾名思义)的运行时环境,它有自己的文件系统、网络等。你不能从你的 docker 容器直接访问主机的文件系统除非你有一些必要的配置(挂载)在您的 docker run .. 命令或撰写文件中。

解决方案

您必须在 docker 容器内安装卷 /home/storage 才能从容器内读取/写入该位置。为此,在更改主机中的文件系统权限(您已经拥有)后,使用以下运行命令启动容器:

docker run -d --name file-upload-service -v /home/storage:/home/storage -p 9104:9104 file-upload-service:latest

上述命令中的-v标志告诉docker将宿主机的/home/storage目录(:的左侧)挂载到容器的/home/storage目录(:的右侧) .您可以根据自己的方便更改这些目录。

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2020-11-17
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多