docker

Laravel sail で外部APIアクセスエラーする

こんばんは、ウチイダです。

先日お引き受けした案件で、Laravelから外部APIを利用する実装が必要になりました。

いつものように、ローカル環境のSailで動作確認しつつ実装していきます。

しかし、Httpファサードで外部APIにアクセスしようとするとResolving タイムアウトが発生してしまいました。

どうやら、名前解決に失敗しているみたいです。

Dockerネットワーク外のドメインの名前解決をするDNSが設定されていないことが原因だったので、Docker-compose.ymlに、dnsを設定しました。

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
				# (略)

        # 外部DNSを指定する
        dns: 8.8.8.8

いったんコンテナを再起動してDNSを認識できるようにしてからリトライ。

APIサーバを見つけて、レスポンスを取ることができました。

ちなみに、これに苦労してあれこれコントローラのアクションメソッドに書き散らかしてしまったので、その後サービスクラスに切り出すのにそこそこ苦労しました(現在進行形でしてます)。

思いがけない沼にはまると、設計やクラス分解がおろそかになりがちなので気を付けたいです。

以上です。

あなたのお役に立てれば幸いです。

dockerコンテナ内でNginxの起動状態を確認する : ps r コマンド

dockerコンテナ内では、 systemctl や service コマンドが利用できません。

いつものクセでコンテナ化していない環境と同じコマンドを実行するとエラーします。

# / systemctl status nginx
sh: systemctl: not found

実行プロセスの有無で起動状態かそうでないかを判断する

代わりの方法として、プロセスがあるかどうかで判断をしてみます。

# / ps r | grep nginx
    1 root      0:00 nginx: master process nginx -g daemon off;
  101 nginx     0:00 nginx: worker process
  102 nginx     0:00 nginx: worker process
  103 nginx     0:00 nginx: worker process
  104 nginx     0:00 nginx: worker process
  106 root      0:00 grep nginx

rオプションで実行中のプロセスの一覧を表示し、grepでnginxのものだけを絞り込みます。

プロセスがあればNginxが起動していて、何も表示されなければNginxが起動していない…と考えることができます。

以上、あなたのお役に立てれば嬉しいです。