はじめに
vagrantとdockerを併用して開発を行っています。
(vagrantの中にdockerを立てているとかではなく、それぞれ同じ階層で独立している)
なぜこんな複雑な環境になっているのかはさておき、
同じような問題で悩んでいる方がもしかしたらいるかもしれないので
備忘録として手順を残しておきたいと思います。
やりたいことのイメージ
vagrant → ローカル → dockerコンテナ(APIサーバー)
vagrantの仮想環境からAPIを呼び出し、
localhostを経由してdockerコンテナのAPIを実行します。
環境構築
ここでは概要しか載せません。
具体的な環境構築手順は検索してください。
vagrant
VirtualBoxを利用して構築します。
一般的な構築で問題ありません。
docker
docker-compose.yml
ローカルホストの8081ポートをdockerコンテナの80ポートに接続します。
(ローカルホストのポート番号は自由に変更してください)
version: '3.5'
services:
nginx:
build:
(省略)
environment:
TZ: Asia/Tokyo
ports:
- "8081:80"
- "4431:443"
depends_on:
- php-fpm
php-fpm:
build:
(省略)
この時点でできていること
vagrantとlocalhostの繋ぎ込み
実は初期設定でポートフォワーディングができている。
vagrant(ゲストOS)からlocalhost(ホストOS)を参照する際には10.0.2.2
のIPを利用する。
VirtualBox仮想マシンのネットワークはデフォルトでNATとなっている。 VirtualBox の場合、NAT ネットワークアダプタには 10.0.2.0/24 の IP アドレスが割り当てられ、ゲスト OS から見える ホスト OS の IP アドレスには 10.0.2.2 が設定される仕様。
したがってホストOS上に建てたサーバーにゲストOSからアクセスしたい場合は、http://10.0.2.2とアクセスすれば普通に見ることができる。
https://garbagetown.hatenablog.com/entry/20100313/1270039659
※ちなみに
localhost(ホストOS)からvagrant(ゲストOS)の繋ぎ込みは127.0.0.1:2222
のIPを利用。
詳細はlocalhostでvagrant ssh-config
で確認可能。
Workbenchをvagrant内のmysqlに接続したいときなどに便利。
❯ vagrant ssh-config [12:45:47]
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile (省略)
IdentitiesOnly yes
LogLevel FATAL
localhostとdockerコンテナの繋ぎ込み
前述のdocker-compose.ymlで設定した通り、
localhost:8081
にアクセスすればdockerコンテナの80
ポートに接続できる。
結論
vagrant→ローカルホスト→dockerコンテナのAPIを呼び出すには
vagrant から10.0.2.2
のIPを利用すればOK
参考