追記 (2018/10/30)
コメントいただいてるやり方が一番よさそうです
#前提
以下のdocker-compose.ymlのように、"app-tier"ネットワークにPHP(Laravel)コンテナとMariaDBコンテナが作られる設定。
PHPコンテナ内のDB接続情報ファイル(私の場合Laravelだったので.env)にMariaDBコンテナの情報を書かなきゃいけないが、DBユーザ名とパスワードはdocker-compose.ymlに書いてる通りrootでいいが、IPアドレスがわからず詰まったのでメモ。
version: '3'
networks:
app-tier:
driver: bridge
services:
php:
build: ./php
volumes:
- ./php/src/:/var/www/html/
- ./php/vhost.conf:/etc/httpd/conf.d/vhost.conf
- ./php/php.ini:/usr/local/etc/php/php.ini
ports:
- '80:80'
command: cd /var/www/html && composer install
command: /usr/sbin/httpd -D FOREGROUND
networks:
- app-tier
my-mariadb:
image: mariadb:latest
restart: always
volumes:
- ./db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD: root
ports:
- "3306:3306"
networks:
- app-tier
##手順1
普通にdockerコンテナ起動
docker-compose up -d
##手順2
コンテナID取得
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a329e211caf laravel5_php "/usr/sbin/httpd -D …" 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp laravel5_php_1
c7abb13d9a8b mariadb:latest "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 0.0.0.0:3306->3306/tcp laravel5_my-mariadb_1
##手順3
DBサーバーにbashで入る
docker exec -it c7abb /bin/bash
##手順4
DBサーバー上のシェルで自身のIP取得
root@c7abb13d9a8b:/# hostname -i
172.20.0.3
または
root@c7abb13d9a8b:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.0.3 c7abb13d9a8b
DBコンテナの内部IPが172.20.0.3とわかったので、PHPコンテナから接続先のDBコンテナを指定できる。
ただしdocker-compose downでコンテナを削除したあと再度コンテナを生成するとIPが変わる気がする。
「dockerのコンテナに固定IPを振る」https://qiita.com/reflet/items/e10442c16834a9ce15b3
で解決ですね
(追記)コメントにある解決方法の方がスマートです