このメモ
多くの人はこんなことではまらないと思うので、自分の備忘録です。
その1:なぜか嵌った罠:dockerのネットワークに接続できない。それに気付けなかったこと。
MacOSXでDockerToolBoxを使って、Dockerコンテナを作成していた。
作成したコンテナがbridgeにつながっていない。
教科書通りにrunしたら普通はbridgeに入るのではないか・・・。
なぜか環境が異常をきたしていたのか、それで作成したコンテナにローカル側からアクセスできなかった。
というわけで、他にそういう事に遭遇した人がいれば教えてください。
正常であれば、以下のようにできると思う。
- docker-machineを作成する
- docker runする
以下の例ではMYSQLとNginxを起動してみている
docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=password -p 3308:3306 -d mysql:latest
docker run --name ok-nginx -d -p 8080:80 nginx
- ホスト側から接続して確認する
- nginxであれば、「//192.168.99.100:8080/」に接続して「Welcome to nginx!」の画面が見れる
- MySQLであれば、「mysql -u root -p -h 192.168.99.100 -P 3308」でmysqlコンソールに入れる
今回はここで躓いた。
ホスト側から何度アクセスを試みても、繋がらない、どうしてだろうと、破棄と作成ばかりを繰り返して、時間を浪費してしまった。やっぱりきちんとドキュメントを読み切れていない。反省。
ここでやるべきことは、次にあげる**「dockerのネットワーク確認する」**でした。
- dockerのネットワーク確認する
これが大事だった!!
ここでちゃんtネットワークの「 docker network inspect bridge」でbridgeにつながっているかどうかを確認しておけば、すぐに何かがおかしいと気付けたはず。
正常であれば、bridgeに接続するdockerを確認できる。
[~/bohelabo 21:34:28]$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "df96314c72193f670d28a72e606e498da7be7b3a3801c211196416b6a747ac83",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Internal": false,
"Containers": {
"4232a9941faf07ed39b59c2d60fd7bb64bde09715fef2b918d46e42b47436c23": {
"Name": "some-mysql",
"EndpointID": "463fa0ddddb8a7e22050665438261df06141ef47d1b9d54ea5f501046db92682",
"MacAddress": "02:42:ac:11:00:05",
"IPv4Address": "172.17.0.5/16",
"IPv6Address": ""
},
"6036acde79451e62cc11771b6c662f06545a6e336bd8c12def68a13118722360": {
"Name": "some-nginx",
"EndpointID": "eafc8ad714fbb375c383cdf2702e00e715437763f87cf8906ed13acf4009f2d3",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"6c26bccf68cb8b1cb92c287381027841799ae2ec8fb6db508aef2df43cc1bc49": {
"Name": "test-mysql",
"EndpointID": "3fb03ecbb55329cbb22ffce0ea71b59f5a079e995ee1a4e9246c1f1bfff7e708",
"MacAddress": "02:42:ac:11:00:06",
"IPv4Address": "172.17.0.6/16",
"IPv6Address": ""
},
"890efad657df5f2bf6b14f15cc67f826262bd5a121df88675195c55ad8299643": {
"Name": "test-nginx",
"EndpointID": "46ee088ec228baef74f52ee62a3c962da2e95d2592c41183c351e845ecbb4b0d",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"f864809cb7e68701ce2cbb9524ba5d0f3a8b221b914a237a4a31bb7d73bf0569": {
"Name": "ok-nginx",
"EndpointID": "ebe040a8487cb5c83521bcab7c70b7f9a75172aa895d15d5d644ff2068cfc934",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
コンテナ全部落としたい、消したい
実験をたくさんやるとコンテナが蓄積されるので、以下のコマンドで一気にお掃除できます
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
その2:AWS EC2に作成したdocker-nachineの状況が見れない?
docker-machine sshで、作成したdockerのインスタンスに入って、「docker ps」をやるとですね、
[Cannot connect to the Docker daemon. Is the docker daemon running on this host?]で怒られます。
sudoしないと見れないですよ。
docker-machine ssh docker-bohe
ubuntu@docker-bohe:~$ whoami
ubuntu
ubuntu@docker-bohe:~$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ubuntu@docker-bohe:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a8ccadb7e0d api_hapi "/bin/sh -c 'cd /src " 2 days ago Up 2 days 0.0.0.0:3333->3333/tcp api_hapi_1
f5574efbd1c1 api_mroonga "/root/entrypoint.sh" 2 days ago Up 2 days 0.0.0.0:3306->3306/tcp api_mroonga_1
ubuntu@docker-bohe:~$
その3:aws configure list とdocker-machine createの関係(未解決)
さて、以下のような状態だったとしてます。
ここで、docker-machineを立ち上げてみましょう。
~/bohelabo 21:47:28]$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile bohelabo manual --profile
access_key ****************FJIA shared-credentials-file
secret_key ****************+ifS shared-credentials-file
region us-east-1 config-file ~/.aws/config
ここで
$ export AWS_ACCESS_KEY_ID=AKID1234567890
$ export AWS_SECRET_ACCESS_KEY=MY-SECRET-KEY
[~/bohelabo 22:04:59]$ docker-machine create --driver amazonec2 docker-bohe2
Running pre-create checks...
Error with pre-create check: "unable to find a subnet in the zone: us-east-1a"
us-east-1aなるサブネットはないとな。
[~/bohelabo 22:41:31]$ docker-machine create --driver amazonec2 --amazonec2-vpc-id vpc-c5d5d2a1 aws01
Running pre-create checks...
Error with pre-create check: "unable to find a subnet in the zone: us-east-1a"
[~/bohelabo 22:48:25]$ docker-machine create --driver amazonec2 --amazonec2-vpc-id vpc-c5d5d2a1 --amazonec2-subnet-id us-east-1b aws01
Error setting machine configuration from flags provided: unexpected EOF
[~/bohelabo 22:51:41]$ docker-machine --version
docker-machine version 0.7.0, build a650a40
ここで、一旦、aws configure listがクリアな状態で実行してみた
~/bohelabo 22:55:57]$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key <not set> None None
secret_key <not set> None None
region <not set> None None
[~/bohelabo 22:56:06]$ export AWS_ACCESS_KEY_ID=XXXXXXX
[~/bohelabo 22:57:24]$ export AWS_SECRET_ACCESS_KEY=XXXXXXX
[~/bohelabo 22:57:30]$ docker-machine create --driver amazonec2 aws01
Running pre-create checks...
Error with pre-create check: "unable to find a subnet in the zone: us-east-1a"
[~/bohelabo 22:57:41]$ docker-machine create --driver amazonec2 --amazonec2-subnet-id us-east-1b aws01
Error setting machine configuration from flags provided: unexpected EOF
結果、やっぱり実行できない。
あれ、何かissue上がっている。。。でも解決してなさそうなんだけど、どうなのこれ・・・。
unexpected EOF · Issue #2661 · docker/machine
https://github.com/docker/machine/issues/2661
というわけで、続debug中です。何でこんなに地雷が・・・。
あとがき
そんなこんなで先週はロス時間長すぎて、泣きそうです。
そもそも、もっとこういう方法があるよ、などご指摘ありましたら、よろしくお願いします。