1. ホーム

socket.gaierror: [Errno 8] nodenameまたはservnameが提供されない、またはわからない

2022-02-12 12:14:41

ちなみに、調べた記事をいくつか載せておきます。

1.

エラーの報告
socket.gaierror: [Errno 8] nodenameもservnameも提供されない、またはわからない

原因
etc/hostsにホスト名が書き込まれていない。例えば、上記の例外メッセージにある MAC-20150101 は、実際には私たちの Mac システムのホスト名であり、いくつかのコードはホスト名に基づいて対応する IP アドレスを見つけるためにローカル DNS に行く必要があり、ローカル DNS 設定はホスト名の IP アドレスが何かを特定しないため、このエラーも表示されます。

解決方法
pythonインタプリタに実装。

python


ソケットライブラリが提供するgethostname()メソッドを呼び出してホスト名を取得します。

>>>import socket
>>>socket.gethostname()
>>>>exit()


ホスト名を取得し、hostsファイルを修正し、コマンドを入力します。

vim /etc/hosts


ホスト名を追加 127.0.0.1 ホスト名

エラーの解決

2. Mac システムで Java Web プロジェクトを起動すると、nodename と servname が表示される場合の解決法

元記事へのリンク: https://blog.csdn.net/longyuhome/article/details/50674442

今日、MacシステムでJavaのWebプロジェクトを開始すると、java.net.UnknownHostExceptionが表示されました。MAC-20150101 nodenameもservnameも同様のエラーを出しますが、Windows環境では同じプロジェクトが正常に起動し、実行されました。そこで、英語ですが、ネットで解決策を見つけ、実践したところ、確かに解決できました。では、この問題の解決策を紹介します。
まず、例外メッセージを見てください。

java.net.UnknownHostException: MAC-20150101: MAC-20150101: nodename nor servname provided, or not known
at java.net.InetAddress.getLocalHost(InetAddress.java:1473)
at org.eclipse.rse.core.RSECorePlugin.getLocalMachineName(RSECorePlugin.java:265)
at org.eclipse.rse.core.RSEPreferencesManager.getDefaultPrivateSystemProfileName(RSEPreferencesManager.java:358)
at org.eclipse.rse.core.RSEPreferencesManager.initDefaults(RSEPreferencesManager.java:337)
at org.eclipse.rse.internal.core.RSEPreferenceInitializer.initializeDefaultPreferences(RSEPreferenceInitializer.java:23)
at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:300)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
....
....
....
Caused by: java.net.UnknownHostException: MAC-20150101: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
at java.net.InetAddress.getLocalHost(InetAddress.java:1469)
... 28 more

例外メッセージにある MAC-20150101 というのは、実際には私たちの Mac システムのホスト名で、いくつかのコードはホスト名に基づいて対応する IP アドレスを見つけるためにローカル DNS に行く必要があり、ローカル DNS 設定では IP アドレスが何であるか特定できないので、このエラーも表示されることになります。

解決方法はとても簡単です。

1) Macシステムでターミナルを開き、ここに示すように、コマンド cat /private/etc/hosts を入力して、現在のホストDNSの設定を確認します。

2) 次に、ホスト設定を編集してホスト名のマッピングを追加します。コマンド sudo vi /private/etc/hosts を入力し、VI エディターに移動して、次のマッピングを追加します。

127.0.0.1 mac-20150101

終了して保存するだけです。

3) 最後に、ターミナルで dscacheutil -flushcache というコマンドを入力します。

この3つのステップを経て、Java Webプロジェクトの起動時に以下のエラーメッセージが表示されなくなります。

このエラーの原因は、ウェブが「プロジェクト内に以下のコードを呼び出す場所がある」と言っているからです。

InetAddress.getLocalHost().getCanonicalHostName(); 

このメソッドはFQDN(Fully Qualified Domain Name)を返すと書いてあり、ホスト名が設定されていない場合、このコードを呼び出すと例外メッセージが投げられます。このメソッドは基盤となるOSに依存し、MacシステムはWindowsとは少し異なる方法で設定されています

参考にしてください。

プロファイル 1: http://crunchify.com/getting-java-net-unknownhostexception-nodename-nor-servname-provided-or-not-known-error-on-mac-os-x- update-your-private-etchosts-file/

3. socket.gaierror: [Errno -2] リモートサーバJupyter notebookの設定時にName or service not knownエラーが発生しました。

コマンドを入力して、jupyter_notebook_config.pyの設定ファイルを修正します。

vim ~/.jupyter/jupyter_notebook_config.py

この設定ファイルの中で、c.NotebookApp.ipを探し、この行を見つけて、c.NotebookApp.ip='0.0.0'に変更します(通常チュートリアルでは'*'に変更します)、保存してノートブックを再起動すると完了です。

## The IP address the notebook server will listen on.
c.NotebookApp.ip = '*'
c.NotebookApp.allow_remote_access=True