無圖無真相,先放個效果圖:node
使用 docker 來跑一些服務很方便,可是有的時候想管理容器裏面的文件卻很麻煩 -- 通常常規作法有3種:linux
經過數據卷或數據卷容器的方式git
啓動容器的時候時候啓動 vsftpd 或者 sshd 等服務,並開啓端口映射,而後經過 ftp/sftp 連上去管理github
進入容器的終端,經過命令行管理docker
可是這些作法都有必定的缺陷和不便:typescript
1和2都是須要在啓動容器的時候作一些配置,若是容器已經啓動了就歇菜了。並且2須要額外的端口映射,佔用主機的端口。3的作法比較 geek ,而容器中一般只有基礎的 shell 工具,沒有一個熟悉的工具套件環境,操做比較費時費力,不夠直觀。shell
我所能想到比較好的解決方案是綜合2和3的方案,構建一個不須要額外的啓動配置的 FTP
服務器:ftp-server-for-dockernpm
這是一個 docker 專用的 FTP 服務器 - 容許經過 FTP 協議來訪問 docker 容器中的文件(即便 docker 容器已經啓動了也能夠的喲)。基於 linux shell
sh
和 docker 的docker cp
.服務器
推薦使用 npm 安裝:網絡
npm install -g ftp-server-for-docker
好比說在 localhost:21
上啓動 FTP 服務器,並運行 test
用戶經過密碼 123456
來訪問:
$ ftp-server-for-docker -H localhost -p 21 --users test:123456 FtpServer start listening at localhost:21
使用 ftp-server-for-docker
來瀏覽容器 wordpress
中的文件:
想要知道更多使用方法,能夠查看命令行幫助:
$ ftp-server-for-docker --help Usage: ftp-server-for-docker [options] Options: --port, -p Specify which port to listen on(default is 21) [number] --host, -H Specify which host to bind(default is 0.0.0.0) [string] --annoymous, -a Whether enable annoymous user [boolean] --users, -u Specify users (in form like username:password, can be multiple) [array] --config, -c Specify which configuration file to use --debug Whether enable debug mode [boolean] -h, --help Show help [boolean] -?, --help Show help [boolean] Examples: ftp-server-for-docker -h localhost -p 21 Start the FTP Server on -u test:123 localhost:21, allow user `test` to access.
這個 FTP 服務器網絡方面採用了比較成熟的 ftpd ,而文件系統模塊替換成了新寫的 Docker FS.
文件系統的基本操做(stat
/readdir
/open
/unlink
...)都是經過 docker exec
、docker cp
和臨時文件來完成,好比:
stat
是經過 docker exec <container> stat xxx
來查看文件狀態
readdir
是經過 docker exec <container> ls -1 --color=none
來列出目錄下的文件
open
是經過 docker cp <container>:<path> <temp-path>
把容器中的文件拷貝到臨時文件中,而後再讀取的
具體實現流程參見源代碼
這個項目中的主要源代碼都使用 TypeScript -- 都是在 src/*.ts
中,經過 tsc
編譯後生成成 lib/*.js
,最終npm打包的只有 lib/*.js
沒有 src/*.ts
.
這是我第一次使用 TypeScript. TypeScript 的強類型帶來不少方便,也帶來不少不便。綜合而言,TypeScript 讓我想起了曾經使用過的 C#,結合 Visual Studio Code 來用仍是利大於弊。TypeScript 能在編輯和編譯的時候就檢查出不少類型問題,並且智能提示確實很棒。
FileZilla 沒法列出目錄結構 -- 能夠嘗試配置傳輸模式爲 主動模式
,被動模式還有問題,正在解決ing...
中文目錄顯示亂碼 -- 已知問題,正在解決ing...
若有其餘問題,歡迎來提 issue , 固然更歡迎 fork 並解決後來提 PR.
本文地址:http://www.clarencep.com/2017... 轉載請註明出處