北海道でリモートワークするエンジニアの日常

東京から札幌に移住したフリーランスのエンジニア。車、筋トレ、ライフハックネタが多め。

laradockでworkspaceからnginxのコンテナにhttpリクエストを送れるようにする

f:id:pawpuro10:20191023205531j:plain

普段laravelで開発をすることが多く、開発環境はローカルにdockerで環境が手軽に作れるlaradockというのを使っているんですが、今回バッチを開発していた時に同コンテナ内のapiにリクエストを送りたい、というケースが発生しました。しかし、少々設定が必要だったので記録しておきます。

リクエストする経路を考える

api-local.test.jpというhost名のAPIを開発しているとします。試しにworkspaceのコンテナ内からリクエストを送ってみます。

root@76c4b87567dc:/var/www# curl api-local.test.jp

root@76c4b87567dc:/var/www# curl http://api-local.test.jp
curl: (7) Failed to connect to api-local.test.jp port 80: Connection refused

接続できません。laradockはdocker-composeでいくつかのコンテナを立ち上げて環境を構築しているんですが、主なコンテナはworkspace, nginx, mysqlなどになります。今回はworkspaceで実行するバッチからAPIのリクエストを受け付けるnginxのコンテナに接続する必要があります。必要なことは以下のとおりです。

  • nginxのコンテナの内部IPを調べる
  • workspaceのコンテナのhostsにAPIのドメインを追加する

nginxのコンテナの内部IPを調べる

まずdocker-hostのlaradockのディレクトリに移動し、下記コマンドでコンテナに接続します。

docker-compose exec nginx bash

次に、IPを調べます。2つ出てきますが、1つ目でOK。

bash-4.4# hostname -i
172.19.0.7 172.18.0.4

workspaceのhostsの設定を追加する

一度nginxのコンテナから出て、workspaceのコンテナにログインします。

$ docker-compose exec workspace bash

hostsファイルを編集し、api-local.test.jpのhostを追加します。

root@76c4b87567dc:/var/www# vi /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.19.0.7      api-local.test.jp

接続テストをしてみる

hostsファイルを保存し、再びcurlコマンドを打ってみます。

root@76c4b87567dc:/var/www# curl api-local.test.jp
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
...

見事、htmlが返ってくるようになりました!