【Docker】FTPサーバコンテナ構築手順と使い方(Pure-ftpd Server)

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サーバ)の構築方法は以上となります。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!