目的
dockerを使っていて、ポートの理解の理解が足りておらず接続エラーになったのでメモ。
Docker Documentation: https://docs.docker.com/compose/compose-file/compose-file-v3/#ports
をみていて、hostのポートとコンテナのポートについて理解したことを書いた。
docker-compose
ポートマッピングするにはdocker-composeに以下のように書く。
web:
ports:
- "3000:3000"
いくつか書き方があるが、上記の書き方はDocker Documentationの
Specify both ports (HOST:CONTAINER)
に従っている。ここの意味は「コンテナはポート番号3000で起動していて、ホストのサーバーはポート番号3000で起動していますよ」ということ。どちらも3000なのでわかりづらいが、
もし- "3001:3000"
とした場合「コンテナはポート番号3000で起動していて、ホストのサーバーはポート番号3001で起動しています、ということ。この書き方の場合hostのIPアドレスは省略されており0.0.0.0
が指定されている。0.0.0.0
はローカル上のすべてのIPv4アドレスのこと。実行すると「自ホスト宛の通信はIPアドレス関係なくポート番号3001で受け入れて、コンテナのポート番号3000番に転送する」という結果になる。
結論
まとめると題名の通り「railsを5000ポートで起動してブラウザで7000ポートでアクセスできるようにする」には下記のように記述すれば実行できる。
web:
ports:
- "7000:5000"