docker-compose.ymlのportsについてのメモ
おもしろい挙動をするので記事化する。
中のコード読んでみたい。
version: '3'
services:
nginx:
image: nginx
ports:
- 0:80
portを0にするとどうなるだろうか。
~/D/test (*´ω`*) < docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05e0975ea3d1 nginx "nginx -g 'daemon of…" 51 seconds ago Up 49 seconds 0.0.0.0:32768->80/tcp test_nginx_1
0.0.0.0:32768->80/tcp
なんと、 32768
にforwardされるのだ。
もう一度 docker-compose up
し直す。
~/D/test (*´ω`*) < docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05e0975ea3d1 nginx "nginx -g 'daemon of…" 4 minutes ago Up 4 seconds 0.0.0.0:32769->80/tcp test_nginx_1
0.0.0.0:32769->80/tcp
こうなる。不思議だ。
どこかの記事で読んだのだけれども、被らないようにportをforwardingしてくれるそうな。
公式ドキュメントのNoteもおもしろい。
Note: When mapping ports in the HOST:CONTAINER format, you may experience erroneous results when using a container port lower than 60, because YAML parses numbers in the format xx:yy as a base-60 value. For this reason, we recommend always explicitly specifying your port mappings as strings.
https://docs.docker.com/compose/compose-file/
↑のgoogle翻訳。
注意:HOST:CONTAINER形式でポートをマッピングする場合、60未満のコンテナポートを使用すると、YAMLがxx:yyの形式の数値を60進数の値として解析するため、誤った結果が生じる可能性があります。このため、ポートマッピングを常に文字列として明示的に指定することをお勧めします。