トラブルシューティング / コードが外部ネットワークにアクセスできない
スクリプト内で外部ネットワークにアクセスできない原因は、そのほとんどがDNS、ファイアウォールです。
具体的には、スクリプトが requests.get('http://bing.com') のようなコードを実行すると、次のエラーが発生します:
Temporary failure in name resolutionConnection refusedConnection to bing.com timed out- その他のネットワークエラー
問題を切り分けるには、次の操作を順に実行してください:
- ホストで
ping 8.8.8.8を実行し、ホストが外部ネットワークにアクセスできるか確認します - ホストで
curl http://bing.comを実行し、ホストのDNSが正常か確認します docker exec -it {DataFlux Func コンテナ ID} sh -c 'exec ping 8.8.8.8'を実行し、コンテナ内から外部ネットワークにアクセスできるか確認しますdocker exec -it {DataFlux Func コンテナ ID} sh -c 'exec curl http://bing.com -i'を実行し、コンテナ内のDNSが正常か確認します
8.8.8.8 はよく使われるパブリックDNSサーバーのアドレスです
インストールされている DataFlux Func イメージ内に ping コマンドがない場合は、代わりに curl http://{IP アドレス} コマンドを使うこともできます
考えられる原因と解決策:
| 考えられる原因 | 解決策 |
|---|---|
| ホストが外部ネットワークにアクセスできない、DNSが正常でない | OSのネットワーク設定を確認・調整する |
| コンテナ内から外部ネットワークにアクセスできない、DNSが正常でない | Docker関連の設定を確認・調整し、必要に応じてOSのネットワーク設定も確認する |
Docker DNS 設定の参考
/etc/docker/daemon.json ファイルを編集し、以下の内容を追加して保存した後、Docker サービスを再起動します:
| JSON | |
|---|---|
1 2 3 4 5 6 | |