你好我是初學者docker
。
我使用以下java
代碼將輸出檔案保存在當前目錄中:
File currDir = new File(".");
String path = currDir.getAbsolutePath();
String fileLocation = path.substring(0, path.length() - 1) "SavedFile.xlsx";
FileOutputStream outputStream = new FileOutputStream(fileLocation);
workbook.write(outputStream);
System.out.println("Excel file created.........");
workbook.close();
我已經構建了一個 DockerImage 并執行了容器。我知道一旦容器完成執行,所有檔案都會從中丟失。
我嘗試在我的 mac 終端上使用以下命令將我的本地目錄映射到容器
docker run --name mycontainer -v /users/myname/Desktop/OutputFolder : / myimage
或者
docker run --name mycontainer -v /users/myname/Desktop/OutputFolder : / -it myimage
我收到以下訊息:
docker:無效的參考格式。
與此關聯的 dockerfile 如下:
# we will use openjdk 17
FROM openjdk:17
# copy the packaged jar file into our docker image
COPY out/artifacts/FileOnDocker_jar/FileOnDocker.jar /demo.jar
# set the startup command to execute the jar
CMD ["java", "-jar", "/demo.jar"]
我嘗試登錄到容器
myname@xyz DockerTest % docker exec -it mycontainer /bin/bash
bash-4.4# pwd
/
由于這個原因,我在上面的 docker run 命令中使用/將外部目錄映射到容器目錄。
bash-4.4# ls -al
total 21156
drwxr-xr-x 1 root root 4096 Apr 30 11:47 .
drwxr-xr-x 1 root root 4096 Apr 30 11:47 ..
-rwxr-xr-x 1 root root 0 Apr 30 11:47 .dockerenv
lrwxrwxrwx 1 root root 7 Oct 9 2021 bin -> usr/bin
dr-xr-xr-x 2 root root 4096 Oct 9 2021 boot
-rw-r--r-- 1 root root 21602227 Apr 30 08:07 demo.jar
drwxr-xr-x 5 root root 360 Apr 30 11:47 dev
drwxr-xr-x 1 root root 4096 Apr 30 11:47 etc
drwxr-xr-x 2 root root 4096 Oct 9 2021 home
lrwxrwxrwx 1 root root 7 Oct 9 2021 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Oct 9 2021 lib64 -> usr/lib64
drwxr-xr-x 2 root root 4096 Oct 9 2021 media
drwxr-xr-x 2 root root 4096 Oct 9 2021 mnt
drwxr-xr-x 2 root root 4096 Oct 9 2021 opt
dr-xr-xr-x 188 root root 0 Apr 30 11:47 proc
dr-xr-x--- 1 root root 4096 Apr 27 21:54 root
drwxr-xr-x 4 root root 4096 Apr 26 19:36 run
lrwxrwxrwx 1 root root 8 Oct 9 2021 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Oct 9 2021 srv
dr-xr-xr-x 13 root root 0 Apr 30 11:47 sys
drwxrwxrwt 1 root root 4096 Apr 27 21:54 tmp
drwxr-xr-x 1 root root 4096 Apr 27 21:54 usr
drwxr-xr-x 1 root root 4096 Apr 26 19:36 var
bash-4.4#
誰能幫助我在哪里犯錯?
提前致謝。
添加控制臺代碼:
Console console = System.console();
System.out.println("Please enter your username: ");
String username = console.readLine();
System.out.println("Please enter your password: ");
char[] passwordChars = console.readPassword();
String password = new String(passwordChars);
uj5u.com熱心網友回復:
首先是卷映射選項中不能有空格。IE
docker run --name mycontainer -v /users/myname/Desktop/OutputFolder : / myimage
應該
docker run --name mycontainer -v /users/myname/Desktop/OutputFolder:/ myimage
但這不起作用,因為您將主機目錄映射到影像的根目錄。當你這樣做時,你“隱藏”了根目錄中的所有內容,以及容器中它下面的所有內容,包括你的 .jar 檔案。
您可以做的是將單個檔案映射到輸出檔案。據我所知,容器中輸出檔案的檔案名將是/SavedFile.xlsx
. 為此,在啟動容器之前,該檔案必須存在于主機上,因此使用以下 2 個命令
touch /users/myname/Desktop/OutputFolder/SavedFile.xlsx
docker run --name mycontainer -v /users/myname/Desktop/OutputFolder/SavedFile.xlsx:/SavedFile.xlsx myimage
它應該可以作業,您應該/users/myname/Desktop/OutputFolder/SavedFile.xlsx
在主機上獲得輸出。
uj5u.com熱心網友回復:
所以最后總結一下漢斯的回答:
- 映射時無需空格
docker run --name mycontainer -v /Users/myname/Desktop/OutputFolder/SavedFile.xlsx:/SavedFile.xlsx myimage
2:如果java應用程式輸出了任何檔案,那么請確保必須在本地目錄中預先創建同名的相同檔案,以便從容器中映射它。因此,本地目錄中的檔案將具有容器執行后所需的資料。(例如:在我的情況下,我將其命名為 SavedFile.xlsx)
3:當您在容器內的基于 java 的應用程式中使用控制臺接受用戶名或密碼時,使用-it
使控制臺能夠接受來自鍵盤的用戶名和密碼,否則將引發空指標例外。
結果,最終命令如下:
docker run -it --name mycontainer -v /Users/myname/Desktop/OutputFolder/SavedFile.xlsx:/SavedFile.xlsx myimage
歡迎任何其他建議/更正。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468840.html
下一篇:Dockerfile未執行-'對ansible_image的拉取訪問被拒絕,存盤庫不存在或可能需要'dockerlogin''