laravel
docker
lumen

DockerコンテナからポートフォワードでDBアクセスする

やりたいこと

公開鍵認証を使って踏み台からDBをポートフォワードする
Dockerコンテナに置いたLaravel/Lumenから、そのDBにアクセスする

環境

macOS High Sierra 10.13.2
Docker version 17.12.0-ce, build c97c6d6
docker-compose version 1.18.0, build 8dd22a9

前提

手順

pf.shを用意

.ssh/configでも良いと思います。
ローカルのMySQLコンテナと競合しないように3307番に割り振ります。

docker-assets/php-fpm/pf.sh
#!/bin/sh
ssh -o ServerAliveInterval=60 -i ~/.ssh/id_rsa username@bastion-server.net -C -N -f -L 3307:mysql-server.net:3306

PHP-FPMのDockerfileに設定を追加

id_rsapf.shdocker-assets/php-fpm/に配置しておきます。

docker-assets/php-fpm/Dockerfile
RUN apk add openssh

COPY id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
COPY pf.sh /root/pf.sh

Laravel/Lumenの.envを編集

app/.env
DB_HOST=127.0.0.1
DB_PORT=3307

localhostは解決出来ないので注意。

実行と接続

docker-compose up -d
docker exec -it {コンテナ名} /bin/sh
sh ~/pf.sh

参考

Laravelの開発に最適なDockerCompose作ってみた - えむにわリソース