docker 便利ですよね、とにかくイメージつくって run させればどこでも同じものが動かせるので。
Docker Meetup Tokyo #6 に応募してみたりもしました。
それはさておき、global には EXPOSE したくないけどホストマシンのなかで EXPOSE したいコンテナってありますよね。
でも、CentOS の firefalld 環境では以下のコマンドで EXPOSE したコンテナのポートが外部からさらけ出されます
現象の確認
1
2
3
4
| [root@dockerhost ~]# docker run -Pd bootjp/smoocy
[root@dockerhost ~]# 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
| [root@dockethost ~]# docker run -pd 172.17.0.1:9000:80 bootjp/smoocy
[root@dockethost ~]# 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 アドレスを指定してポートフォワードするようにして解決しました。