0. 前提
- サーバ等全く起動させずコンテナを実行する。
1.現象
- docker-composeにportsを指定しているが、ホスト側から指定したポートにアクセスできない。
- docker-composeと起動コマンドは以下。
docker-compose.yml
version: '3'
services:
app:
build:
context: docker
dockerfile: Dockerfile
ports:
- 80:80
- コンテナを実行し、bashを使えるようにする。
run
docker-comopse run app bash
- docker-compose psでポートのフォワード状態をみるが、フォワードされていない。
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
コンテナ名 bash Up 80/tcp
2.原因
- 「docker-compose run」で実行すると、docker-compose.yml内のportsの設定は反映されない。
3-1.対応(1):-pオプションを付けて実行。
- 「-p」オプションをつけることでportの開放とフォワードができる。
- この場合、portsの設定は不要。
docker-compose run -p 80:80 app bash
- ポートの状態を確認。
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
コンテナ名 bash Up 0.0.0.0:80->80/tcp,:::80->80/tcp
- 「-p」オプションについて:公式:docker-compose run
3-2.対応(2):「tty:true」を設定し、「up」コマンドで起動状態を維持。
docker-compose.yml
version: '3'
services:
app:
build:
context: docker
dockerfile: Dockerfile
ports:
- 80:80
tty: true
- コンテナを実行し起動状態を維持。
run
docker-compose up
- ポートの状態を確認。
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
コンテナ名 bash Up 0.0.0.0:80->80/tcp,:::80->80/tcp
- 「tty」については、以下の記事で詳しく説明されており、参考になります。