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進数の値として解析するため、誤った結果が生じる可能性があります。このため、ポートマッピングを常に文字列として明示的に指定することをお勧めします。