はじめに
環境
クライアント
Windows 10
サーバー
ESXi-> PhotonOS -> Dockerコンテナ
ESXiのブラウザコンソールでDockerコンテナ内にログインできるが、ssh/ftpも立ち上がってないのでファイルを転送するのが一苦労でした。
また、大人の事情でポートが塞がれてファイルが送れない場合もあるかと思います。
このように、サーバーにはログインできるけどファイルを送るのが大変なときがあったので解決してみました。
設計
クライアントからサーバーに繋ぐのが難しいのであれば、サーバーからクライアントに繋いでもらう設計にしました。
具体的に言うと、クライアントでファイルサーバー/アップローダーを立ち上げ、サーバー側のwget/curlでファイルを送受信します。
さらに、クライアントがポート開放できない環境だったため、ngrokを利用してアクセスしています。
実装
プロジェクト一式
github
一部抜粋
func main() {
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("files/"))))
panic(http.ListenAndServe(":8080", nil))
}
ファイルダウンロード
wget http://localhost:8080/files/fileName
ファイルアップロード
curl -X POST http://localhost:8080/upload -F "file=@filePah"
ブラウザが利用できる環境であればTopページでファイルアップロード
http://localhost:8080/files/ でファイル一覧の表示が可能です
まとめ
環境構築がめんどくさかったり、ファイル転送のためだけにssh等のセキュリティリスクを増やすのであれば
このような実装もありだと思います!
もっといい方法ありましたら教えていただけると幸いです!