今回も解決できてないので、お時間ある方のみご照覧ください。
ローカル環境(Windows 10 Home)でのKUSANAGI Runs on Dockerでの話です。
どういうことかというと、
こういうことですね。ホストOS側から新しいthemeをアップロードしようとしたところ、Dockerコンテナ(kusanagi-data[BusyBox])側とftp接続せんと進まない模様。
Dockerコンテナは外部からアクセスできない様に設計されてるらしいはずですが、WordPressはftp接続を求めているようです。(駄目じゃん)
Dockerコンテナとftp接続には proftpd? pure-ftpd? vsftpd?
ftpサーバって無茶苦茶たくさんあるみたいですね。
で、pure-ftpdってなんなのかというと、
Pure-FTPd is a free (BSD), secure, production-quality and standard-conformant FTP server. It doesn't provide useless bells and whistles, but focuses on efficiency and ease of use. It provides simple answers to common needs, plus unique useful features for personal users as well as hosting providers.
⇩ ということらしく下記サイトが詳しいです
・Pure-FTPd の存在を知ってしまったので試さざるを得ない - Qiita
pure-ftpdは、dockerイメージが用意されているらしく、その名もdocker-pure-ftpd
・DockerでFTPサーバーやSFTPサーバーをたてるのーと - Qiita
docker-pure-ftpd
ftpサーバ用のコンテナを起てるほうが良いみたいですね。(CentOS7のコンテナの中にftpサーバを入れるもんだと思っていたんですが)
・nginx - FTP into existing Docker Containers - Stack Overflow
そして、pure-ftpdのdockerイメージがあるということで、dockerコンテナ(pure-ftpd) を作る流れですね。
⇩ Git Hubで導入手順が公開されてるのでトライしていきます
・GitHub - stilliard/docker-pure-ftpd: Docker Pure-ftpd Server
仮想マシンを起動してない場合は起動しておきます。
docker-machine start kusanagi-machine
『 This error may also indicate that the docker daemon is not running.』となるときは、
・Docker - dockerコマンドをコマンドプロンプトから利用(66952)|teratail
docker pull stilliard/pure-ftpd:hardened
pure-ftpd用のDockerFileの作成 (ファイルの配置場所はどこでも良いみたいです)
E:¥kusanagi-docker¥Dockerfileとしてみました。
FROM stilliard/pure-ftpd # e.g. you could change the defult command run: CMD /run.sh -c 30 -C 5 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R
Dockerfileが作成できたら保存します。拡張子なしで「Dockerfile」として保存しました。拡張子が付いてしまう場合は、『名前の変更(M)』で拡張子以降を無くします。
そしたら、Dockerfileからコンテナ(pure-ftpd)を起動します。
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd:hardened
コンテナ(pure-ftpd)にログインします。
docker exec -it ftpd_server /bin/bash
仮想マシンにsshしないと駄目みたい...見本だと特にsshログインしてる様子はないんですが、自分の場合はsshログインしないと駄目でした。
コンテナにログインできたら、ftpユーザーを作成するようです。useraddで指定したものがftpユーザー名、Passwordで入力したものがftpパスワードになるようです。
pure-pw useradd ts0818 -f /etc/pure-ftpd/passwd/pureftpd.passwd -m -u ftpuser -d /home/ftpusers/ts0818
できてないじゃん....bobしか駄目なのかな? と思ったら自分でディレクトリを作成しないといけないみたいです。
・DockerでFTPサーバーを構築したら簡単すぎた - メンチカツには醤油でしょ!!
cd /home/ftpusers/ makdir ts0818 chown ftpuser:ftpgroup ts0818
このフォルダとffftpなどで接続できるらしいんですが、このコンテナだとWordPressのthemesフォルダがないんですが....嫌な予感がしますね。
とりあえずは、ホスト名(IPアドレス)の問題に進みますかね。
Dockerのネットワーク
⇩ Dockerのネットワークややこしいですね、ですが下記サイトが詳しいです
・Dockerを活用するためのネットワーク関連操作のおさらい - Qiita
ローカル環境(Windows 10 Home)でのKUSANAGI Runs on Dockerの場合、ホストOS(Windows 10 Home)からDocker_Hostに、Docker_Hostから各々のdockerコンテナにという流れで接続されてるのだと思われます。
今回、ホストOS(Windows 10 Home)にあるffftpで、dockerコンテナ(kusanagi-data[busybox])とftp接続したいんですが、dockerコンテナ(ftpd-server[pure-ftpd])というコンテナを別に作成してます。
図みたいなことができるのか謎ですが、dockerコンテナ(kusanagi-data[busybox])にWordPressのthemesフォルダがあるので、そこにアップロードできないと終了ですね。
dockerコンテナ(kusanagi-nginx[CentOS7])にもWordPressがあることが分かったので、 dockerコンテナ(kusanagi-nginx[CentOS7])にftpサーバーを直接インストールしたほうが良いのかもです。
どちらにしろ、dockerコンテナにホスト(Windows 10 Home)からアクセスできないことには駄目そうです。
・Dockerコンテナに外部からアクセスする方法 – ムッシューのIT備忘録
Docker_Hostのほうのネットワーク
docker-machine ip kusanagi-machine
コンテナの一覧を確認します。
が、なぜか、docker-compose ps が機能せず、
docker-compose -p kusanagi-machine ps
仮想マシン(Docker_Host)を指定してpsしたら動きました。
・Docker-compose ps not showing any output · Issue #2188 · docker/compose · GitHub
で、docker-composeした場合は独自のネットワークができるみたいです。
・Compose のネットワーク機能 — Docker-docs-ja 1.13.RC ドキュメント
・docker-compose で立ち上げたコンテナの IP アドレスを調べる - Qiita
ということで、dockerに存在するネットワーク一覧をチェックします。
docker network ls
・docker-compose で別の docker-compose.yml で作ったコンテナとリンクする (ネットワークを繋げる) - Qiita
dokcer-compose up -d でも確認できるらしいのですが、
docker-compose up -d
既にコンテナが起動してる場合にはエラーになってしまうようです。
仮想マシン起動時(docker-machine start kusanagi-machineしたとき)にkusanagi-dataコンテナが自動で起動するためと思われます。
で、コンテナのIPアドレスだけを確認する場合は、
docker inspect -f "{{.NetworkSettings.Networks.NETWORK.IPAddress}}" CONTAINER
でいけるようです。CONTAINERの部分は、コンテナのNAME(docker psしたときとかのNAMEの部分)で大丈夫そうです。
他には、コンテナID以外の情報が入ってしまいますが、
docker network inspect kusanagimachine_default
を実行する方法でもコンテナのIPアドレスが確認できるようです。
[ { "Name": "kusanagimachine_default", "Id": "1be8a37884ff8d5446c881c077d40ddf2eeaf2f7714b430d30013364e1bc0b4c", "Created": "2017-05-28T06:17:11.991220934Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "Containers": { "18189b3f1b983c3135bb5f7c03f5636b16ef57b6ecaf6657b8d26cfd2e6f873c": { "Name": "kusanagi-nginx", "EndpointID": "17cab3c8606bb4f0053b475758aaf40363a1ab23938e1cab0fe4288f5a852784", "MacAddress": "02:42:ac:12:00:06", "IPv4Address": "172.18.0.6/16", "IPv6Address": "" }, "2c9032ebd027854520a33717281ff65d5e6fd2f52be66157b78ac8e2216a9e66": { "Name": "ruby", "EndpointID": "e719ced7c3c602ed6f61f9dbfe94c619eb77728ffc5043ffe54ba7a63a963764", "MacAddress": "02:42:ac:12:00:04", "IPv4Address": "172.18.0.4/16", "IPv6Address": "" }, "6838721b525169706d817013cafb96f788bda54debee55feb14f6ba8ddde45c1": { "Name": "kusanagi-mariadb", "EndpointID": "694d5bbabf987b5e29d6fff60e6a41c0813bce8aa29fbb4d3d2986c8f92e35c6", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "705e73ba297b6b48ebf3a8966a04020248d02d480ad2294a92256c3631c8e32f": { "Name": "kusanagi-data", "EndpointID": "fb09bd54bef42c125f4581e77d1e28b57b4106708425af3154267eba7eeafd9d", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "f7b9dcfa034f0666f97dde2f46526d2142010da0a15c68465c1467d37fb64018": { "Name": "kusanagi-php7", "EndpointID": "d322fed8b2226b947c9436097d9537da65a453645d135e98a3b28ae1b13f7ceb", "MacAddress": "02:42:ac:12:00:05", "IPv4Address": "172.18.0.5/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
異なるネットワーク間の通信は、ルータもしくはL3スイッチなどでないと通信できないようです。
Windows(ホストOS)側のブラウザから、dockerコンテナ(kusanagi-nginx[CentOS7])のWordPressが表示されているので、なんかやりようはあるような気はするのですが...いかんせんネットワークの知識が欠し過ぎて今回も断念。
pure-FTPコンテナにはffftpで接続できたようです。ホスト名(アドレス)はeth1のIPアドレスを指定してます。ユーザー名とパスワードはpure-FTPコンテナでユーザーを作った時のもでOKっぽいです。
PASVモードのチェックを外さないと接続できないっぽいです。
仮想マシン側(Docker_Host)のpure-FTPコンテナの/home/ftpusers/ts0818フォルダに接続されたみたいです。
試しにWindows(ホストOS)側のファイルをアップロードしてみます。
仮想マシン側(Docker_Host)のpure-FTPコンテナにログインして、/home/ftpusers/ts0818に移動すると、ファイルがアップされています。
もう、あとはKUSANAGIの中の人にお頼みするしかなさそうです。
・おれとKUSANAGIとDockerとAzure - Docs.com
というわけで、今回もハマりにハマって徒に時間を使ってしまいましたね。</p
今回はこのへんで。