コンテンツにスキップ

トラブルシューティング / コードが外部ネットワークにアクセスできない

スクリプト内で外部ネットワークにアクセスできない原因は、そのほとんどがDNS、ファイアウォールです。

具体的には、スクリプトが requests.get('http://bing.com') のようなコードを実行すると、次のエラーが発生します:

  1. Temporary failure in name resolution
  2. Connection refused
  3. Connection to bing.com timed out
  4. その他のネットワークエラー

問題を切り分けるには、次の操作を順に実行してください:

  1. ホストで ping 8.8.8.8 を実行し、ホストが外部ネットワークにアクセスできるか確認します
  2. ホストで curl http://bing.com を実行し、ホストのDNSが正常か確認します
  3. docker exec -it {DataFlux Func コンテナ ID} sh -c 'exec ping 8.8.8.8' を実行し、コンテナ内から外部ネットワークにアクセスできるか確認します
  4. 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
{
    "dns" : [
        "8.8.8.8",
        "8.8.4.4"
    ]
}