げっとシステムログ

WEB開発メモ

docker api の公開範囲について

knowledge.sakura.ad.jp

ここを参考にして以下の設定をした

core@coreos ~ $ cat /etc/systemd/system/docker-tcp.socket
[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=2375
Service=docker.service
BindIPv6Only=both

[Install]
WantedBy=sockets.target

これで docker api が使えるようになった!と喜んでいろいろ作業していたのだが、
ふと、どのネットワークからも参照可能であることに気づく

どんなイメージも build できるし、どんなコンテナも run できちゃうじゃん!

今回は社内にあるサーバーで、ローカルネットワークだけだったので何もなかったけどさくらとかのレンサバだったら悲劇的な何かが起こっていたかもしれない

api を公開する理由は、コンテナで docker-ui 的な自作 web アプリを立ち上げていて、 javascript からアクセスしたい、というもの

手軽に済ませるために nginx と html だけの構成で行きたかった
これを実現するために、 nginx でホストの docker api にアクセスするリバースプロキシを定義してある
cgi はセットアップが面倒だったからやりたくなかったけど、結局それは手軽だったのかな?)

というわけで、ホストネットワークからはアクセスできるが、外部のネットワークからはアクセスできないようにしたい

coreos.com

ここを参考にして以下の設定にした

core@coreos ~ $ cat /etc/systemd/system/docker-tcp.socket
[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=172.17.0.1:2375
Service=docker.service
BindIPv6Only=both

[Install]
WantedBy=sockets.target

これで一応うまくいっている気がする