[英]Can not find path to host volume in docker
我正在開發 spring 啟動中的應用程序,其中照片將上傳到服務器,然后使用 url 從服務器讀取。 該應用程序位於 docker 和 tomcat 服務器上。 據我所知,最好的方法是使用主機將照片存儲在 docker 卷上。 因此,我使用 docker-compose.yml 文件創建卷並提供主機路徑。 文件片段:
version: '3.8'
services:
my-app:
image: app
environment:
- _JAVA_OPTIONS=-Xmx512m -Xms256m
- SPRING_PROFILES_ACTIVE=prod,api-docs
.
.
.
ports:
- 8085:8085
networks:
default:
ipv4_address: 172.19.0.2
volumes:
- ./var/home/my-app:/var/lib/docker/containers/docker_my-app //"path to the host:path to the docker container"
根據我在 Docker 網站上閱讀的內容,這就是您應該如何創建到將存儲照片的主機的路徑,即左側是主機的路徑,右側是容器的路徑。 問題是沒有創建或創建路徑,但我找不到它。 我還有一個方法,每次檢查路徑是否存在時都會運行:
@PostConstruct
public void init() {
if (!Files.exists(Paths.get("./var/home/my-app"))) {
try {
Files.createDirectory(root);
} catch (IOException e) {
throw new StorageException("Error initializing directory: " + e.getMessage());
}
}
這會拋出該路徑不存在。
所以,我有問題:
您當前正在將文件夾/var/home/my-app
從主機安裝到容器內的文件夾/var/lib/docker/containers/docker_my-app
中。
當您的應用程序在容器內運行時,您編寫的方法
@PostConstruct
public void init() {
if (!Files.exists(Paths.get("./var/home/my-app"))) {
try {
Files.createDirectory(root);
} catch (IOException e) {
throw new StorageException("Error initializing directory: " + e.getMessage());
}
}
在容器文件系統中創建目錄結構/var/home/my-app
。
如果您的 Java 代碼用於將數據保存在文件夾/var/home/my-app
下,則應按以下方式創建卷:
volumes:
- /var/home/my-app:/var/home/my-app
假設您的檢查方法在您的 Spring 應用程序內,即在 my-app 容器內,您需要檢查
/var/lib/docker/containers/docker_my-app
文件夾,而不是
./var/home/my-app
文件夾:
@PostConstruct
public void init() {
if (!Files.exists(Paths.get("/var/lib/docker/containers/docker_my-app"))) {
try {
Files.createDirectory(root);
} catch (IOException e) {
throw new StorageException("Error initializing directory: " + e.getMessage());
}
}
在第一次使用卷文件夾時,應在主機上創建相應的文件夾(因為您正在使用卷定義的短符號)。 應該創建的文件夾將在您的 docker-compose.yml 文件旁邊,名為 var/home/my-app
如果那是您的意圖,那么我會說,您創建了通往主機的良好路徑。
關於你的第三個問題:
如果主機將具有讀寫權限,我應該在 docker-compose.yml 文件中添加一些內容嗎?
這取決於您是否定義了一個用戶來隔離您的容器。 看看這里: https://docs.docker.com/engine/security/userns-remap/除非你做了這樣的事情,你在容器內的進程以 root 身份運行,然后可以在你的主機上寫入,而不管缺少權限.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.