LoginSignup
3
0

More than 3 years have passed since last update.

docker run のときに指定する -p と –-expose の違い

Posted at

dockerコンテナ起動時にポートを指定する引数 -p と --expose の違いは?

結論

違いは指定されたポートを晒す先

-p (--publish):ホストに晒してホスト側からの接続を許可する

Mysqlのコンテナを立てて各種DBツールから localhost:3306 として繋ぎたい場合、
docker run ~~ -p 3306:3306 ~~ mysql
と公開するポートを指定する必要がある。

このとき、ホスト側ですでに3306ポートが利用中の場合は起動に失敗する。
そんなときは~~ -p 3316:3306 ~~ などにしてホスト側のポート番号を変えてあげればよい。

--expose:同一dockerネットワーク内に晒して、同一ネットワーク内からの接続を許可する

同一dockerネットワーク内に存在するPHP-FPMコンテナから3306ポートを使ってMySQLに接続したい場合に利用する。
※もっとも、MySQLなどはDockerfile内でEXPOSEされているため、指定は不要
 → https://github.com/docker-library/mysql/blob/bc6e37a2bed792b1c4fc6ab1ec3ce316e6a5f061/8.0/Dockerfile#L84

感想

気になって調べたけど、docker run のタイミングで --expose 指定するケースが思い浮かばなかった。
(大体、Dockerfile内でEXPOSEが書かれているため)

あと、MySQLのDockerイメージは33060ポートも指定してたのね、知らなかった。
→ (さっきと同じリンク)https://github.com/docker-library/mysql/blob/bc6e37a2bed792b1c4fc6ab1ec3ce316e6a5f061/8.0/Dockerfile#L84

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0