Dockerで簡単にFTPサーバを構築したいときはこの「Pure-ftpd Server」イメージのコンテナをおすすめします。
すでにDockerをインストール済みであれば、構築時間も1分あれば完了します。
即席でFTPサーバを立てたいのであればおすすめです。
Dockerインストールは以下を参照
DockerコンテナでFTPサーバを簡単に構築する手順(Pure-ftpd Server)
FTPサーバのコンテナは以下のイメージから作成します。
【github】Docker Pure-ftpd Server
構築手順は簡単なので公式ページにそって実行します。
Dockerイメージダウンロード
FTPサーバのイメージをダウンロードします。
$ docker pull stilliard/pure-ftpd
コンテナイメージがダウンロードされていることを確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE stilliard/pure-ftpd latest 1ead45bd7df2 4 months ago 148MB
Dockerコンテナ起動(FTPサーバ)
上記でイメージをダンロードできたら以下コマンドでFTPサーバのコンテナを起動します。
今回はローカルPCで起動するので「PUBLICHOST」は「localhost」とします。
$ docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd 6dc8aeec198f803bf1e721b42d5cbad31482a6a10e519bfdf1df8fa5968ba481
正常に起動すると以下のようにFTPコンテナが表示されます。
接続ポートは21番となります。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6dc8aeec198f stilliard/pure-ftpd "/bin/sh -c '/run.sh…" 9 seconds ago Up 8 seconds 0.0.0.0:21->21/tcp, 0.0.0.0:30000-30009->30000-30009/tcp ftpd_server
Dockerコンテナ(FTPサーバ)動作確認
Dockerコンテナが起動した後はFTPサーバへ接続します。
しかし、アクセスできてもユーザ名、パスワードが一致せず正常にアクセスできません。
アクセス失敗例
FTP $ ftp localhost Trying [::1]:21 ... Connected to localhost. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 5 allowed. 220-Local time is now 03:08. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:): test 331 User test OK. Password required Password: 421 Unable to read the indexed puredb file (or old format detected) - Try pure-pw mkdb Illegal instruction: 4
デフォルトではユーザー名・パスワードが設定されていないのでFTPサーバにアクセスし、ユーザ・パスワードを設定する必要があります。
dockerコンテナにアクセスし、ユーザ・パスワード設定
以下ではFTPサーバにアクセスするためのユーザ・パスワードの設定手順となります。
対象のDockerコンテナ(ftpd_server)へアクセスします。
$ docker exec -it ftpd_server /bin/bash root@6dc8aeec198f:/#
コンテナ内にアクセス後、以下コマンドでユーザ・パスワードを設定します。
今回の設定例
- ユーザ: test
- アップロードフォルダ: /home/ftpusers/test
- パスワード: pass
設定コマンド
root@6dc8aeec198f:/# pure-pw useradd test -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/test Password: Enter it again: root@6dc8aeec198f:/# exit exit $
FTPサーバ動作確認(アップロード)
上記で、FPTサーバのユーザ・パスワードを設定後実際にFTPサーバの動作確認をします。
まずは、FTPサーバへアップロードするテストファイルを作成します。
$ touch test.txt
次にFTPサーバへアクセスします。
上記のユーザ・パスワードを設定し、正常にFTPサーバへアクセスできました。
FTP $ ftp localhost Trying [::1]:21 ... Connected to localhost. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 5 allowed. 220-Local time is now 02:54. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:): test 331 User test OK. Password required Password: 230 OK. Current directory is / Remote system type is UNIX. Using binary mode to transfer files.
先ほど作成した「test.txt」をPUTコマンドでアップロードします。
ftp> put test.txt local: test.txt remote: test.txt 229 Extended Passive mode OK (|||30009|) 150 Accepted data connection 0 0.00 KiB/s 226 File successfully transferred
アップロードが完了したらFTPサーバのフォルダにファイルがアップされたことが確認できます。
ftp> ls 229 Extended Passive mode OK (|||30005|) 150 Accepted data connection -rw-r--r-- 1 1000 ftpgroup 0 Mar 14 02:54 test.txt 226-Options: -l 226 1 matches total ftp>
FTPサーバ動作確認(ダウンロード)
次にFTPサーバからファイルをダウンロードします。
以下で、FTPサーバへアクセスします。
$ ftp localhost Trying [::1]:21 ... Connected to localhost. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 5 allowed. 220-Local time is now 03:37. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (localhost:): test 331 User test OK. Password required Password: 230 OK. Current directory is / Remote system type is UNIX. Using binary mode to transfer files.
FTPサーバ上に「test_get.txt」と言うファイルがあることが確認できます。
ftp> ls 229 Extended Passive mode OK (|||30008|) 150 Accepted data connection -rw-r--r-- 1 1000 ftpgroup 0 Mar 14 03:36 test_get.txt 226-Options: -l 226 1 matches total ftp>
以下、GETコマンドで対象のファイルをダウンロードします。
ftp> get test_get.txt local: test_get.txt remote: test_get.txt 229 Extended Passive mode OK (|||30002|) 150 Accepted data connection 0 0.00 KiB/s 226 File successfully transferred ftp> ftp> exit 221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 221 Logout.
ローカルPCに対象のファイルがダウンロードされていることが確認できました。
$ ls test_get.txt
Dockerコンテナ(FTPサーバ)の構築方法は以上となります。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す