JavaScriptを有効にしてください

dockerでEXPOSEしているポートがglobal側からも見えてしまう問題と対策

 ·  ☕ 2 分で読めます

docker 便利ですよね、とにかくイメージつくって run させればどこでも同じものが動かせるので。

Docker Meetup Tokyo #6  に応募してみたりもしました。

それはさておき、global には EXPOSE したくないけどホストマシンのなかで EXPOSE したいコンテナってありますよね。

でも、CentOS の firefalld 環境では以下のコマンドで EXPOSE したコンテナのポートが外部からさらけ出されます

現象の確認

1
2
3
4
[[email protected] ~]# docker run -Pd bootjp/smoocy
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5174b7e01c8b bootjp/smoocy "apache2-foreground" 2 seconds ago Up 1 seconds 0.0.0.0:32768->80/tcp hopeful_morse

local machine

$ sudo nmap -sS dockerhost Password:

Starting Nmap 6.47 ( [http://nmap.org](http://nmap.org) ) at 2016-02-21 18:15 JST
Nmap scan report for dockerhost (**_._**.**_._**) Host is up (0.016s latency).
Not shown: 996 filtered ports

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
32768/tcp open filenet-tms

  対策

run する際に –net オプションをつける(推奨)

例) –net=host 日本語ドキュメントを参照ください

1
docker run --net=host -p6379:6379 redis

run する際に docker0 のブリッジの ip で走らせる(非推奨)

1
2
3
4
5
[[email protected] ~]# docker run -pd 172.17.0.1:9000:80 bootjp/smoocy
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
346b0782e928 bootjp/smoocy "apache2-foreground" 35 seconds ago Up 34 seconds 172.17.0.1:9000->80/tcp sad_raman
5174b7e01c8b bootjp/smoocy "apache2-foreground" 10 minutes ago Up 10 minutes 0.0.0.0:32768->80/tcp hopeful_morse

疎通確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
curl -v 172.17.0.1:9000
* About to connect() to 172.17.0.1 port 9000 (#0)
* Trying 172.17.0.1...
* Connected to 172.17.0.1 (172.17.0.1) port 9000 (#0)
GET / HTTP/1.1
User-Agent: curl/7.29.0
Host: 172.17.0.1:9000
Accept: */*

HTTP/1.1 200 OK
Date: Sun, 21 Feb 2016 09:25:59 GMT
Server: Apache/2.4.10 (Debian) PHP/7.0.3
X-Powered-By: PHP/7.0.3
Vary: Accept-Encoding
Cache-Control: max-age=2592000
Expires: Tue, 22 Mar 2016 09:25:59 GMT
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Length: 3351
Content-Type: text/html; charset=UTF-8

localmachine

$ sudo nmap -sS dockerhost
Password:

Starting Nmap 6.47 ( [http://nmap.org](http://nmap.org) ) at 2016-02-21 18:24
JST Nmap scan report for dockerhost (**_._**.**_._**)
Host is up (0.0063s latency).
Not shown: 996 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
32768/tcp open filenet-tms

Nmap done: 1 IP address (1 host up) scanned in 5.78 seconds

docker run するときに -p で docker0 の IP アドレスを指定してポートフォワードするようにして解決しました。

共有

bootjp / ぶーと
著者
ミドルウェアエンジニア / 7年後に分散データベース研究の世界に貢献することを目指して


目次