LoginSignup
0
0

More than 1 year has passed since last update.

2022-08-11 Docker 上の PHP コンテナから、ホストの PostgreSQL データベースに接続する

Posted at

環境

$ docker --version
Docker version 20.10.6, build 370c289
$ cat /etc/os-release | head -n 2
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"

やりたいこと

Ubuntu のホスト上で Docker エンジンを動かし、さらにその上で PHP のコンテナを動作させている。

Ubuntu のホスト上で別途 PostgreSQL を動作させており、通常 127.0.0.1 のアドレスで接続できる状態である。

Docker エンジン上の PHP コンテナから、 ホストOS 上の PostgreSQL データベースに接続したい。

方法

以下の stackoverflow の回答でうまく行った。

https://stackoverflow.com/a/52591177

PostgreSQL 側の設定

pg_hba.conf で、Docker のネットワークからの接続を許可する。私の場合は 172.16.0.0/12 のサブネットだったので、 172.16.0.0/12 の範囲を広く許可した。

# "local" is for Unix domain socket connections only
local   all         	all                                 	peer
# IPv4 local connections:
host	all         	all         	127.0.0.1/32        	md5
host	all         	all         	172.16.0.0/12       	md5

postgresql.conf を編集し、すべてのインターフェースで接続を待ち受けるように設定した。

 #listen_addresses = 'localhost' 	# what IP address(es) to listen on;
                 	# comma-separated list of addresses;
                 	# defaults to 'localhost'; use '*' for all
                 	# (change requires restart)
 listen_addresses = '*'  	# what IP address(es) to listen on;

Docker 側の設定

docker0 インターフェースに指定されたアドレスを確認し、これをデータベースのホストアドレスとして指定する。

$ ip address show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
	link/ether 02:42:31:7f:15:4c brd ff:ff:ff:ff:ff:ff
	inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

その上で、 --network=host の引数を与えて docker run コマンドを実行したところ、データベースへの接続が成功した。

docker run --network=host --env-file .env <container-name>

Ref

https://stackoverflow.com/a/52591177

0
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
0
0