teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

具体例を追記

2021/11/10 09:11

投稿

surface_0
surface_0

スコア497

answer CHANGED
@@ -2,4 +2,41 @@
2
2
  参考 https://knowledge.sakura.ad.jp/16082/
3
3
 
4
4
  docker-composeでスタックされたコンテナの場合、自動的にネットワークが作成されて、暗黙に同一ネットワークに接続されることになりますが、
5
- それとは別に立ち上げたコンテナから通信する場合は、あらかじめ作成したネットワークに両者を接続するようにする必要があります。
5
+ それとは別に立ち上げたコンテナから通信する場合は、あらかじめ作成したネットワークに両者を接続するようにする必要があります。
6
+ (docker-composeが生成するネットワーク名を調べて接続してもかまいません)
7
+
8
+ ## 追記
9
+
10
+ 具体的な手順の例としては以下のような感じです。
11
+
12
+ ### ネットワーク作成
13
+ ```
14
+ $ docker network create mysql-network --attachable
15
+ ```
16
+
17
+ ### docker-compose.ymlを修正して起動
18
+ ```yml
19
+ version: "3.8"
20
+
21
+ services:
22
+ mysql:
23
+ image: mysql:5.7
24
+ environment:
25
+ MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
26
+ networks:
27
+ - mysql-network
28
+
29
+ networks:
30
+ mysql-network:
31
+ external: true
32
+ ```
33
+
34
+ ```
35
+ $ docker-compose up -d
36
+ ```
37
+
38
+ ### phpMyAdmin起動
39
+ Dockerネットワーク内ではIPアドレスを直接参照する必要は無く、コンテナ名(ホスト名)でアクセスできます。
40
+ ```
41
+ $ docker run -d -e PMA_HOST=mysql --net mysql-network -p 8080:80 phpmyadmin/phpmyadmin
42
+ ```

1

表現を改善

2021/11/10 09:11

投稿

surface_0
surface_0

スコア497

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  dockerではコンテナ間で通信するには同一のネットワークに接続する必要があります。
2
2
  参考 https://knowledge.sakura.ad.jp/16082/
3
3
 
4
- なお、docker-composeでスタックされたコンテナの場合、自動的に暗黙同一ネットワークが作成されますが、
4
+ docker-composeでスタックされたコンテナの場合、自動的にネットワークが作成されて、暗黙同一ネットワークに接続されることになりますが、
5
5
  それとは別に立ち上げたコンテナから通信する場合は、あらかじめ作成したネットワークに両者を接続するようにする必要があります。