近年、効率的なコンテナ化ソリューションとして Docker の人気が高まっています。ただし、コンテナー化されたデプロイメントに Docker を使用する場合、コンテナー内のホストにアクセスすると、コンテナーはホスト Docker を使用してエラーを報告するなど、いくつかの問題も発生します。この記事では、この問題の原因とその解決方法について説明します。
Docker を使用してアプリケーションをデプロイする場合、コンテナー内からホスト ファイル システムまたはホストの Docker デーモンにアクセスする必要がある場合があります。通常、これは、コンテナにこの関数を実装します。ただし、場合によっては、コンテナーがホスト Docker デーモンにアクセスしようとすると、次のようなエラー メッセージが表示されます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">FATA[0000] Post http:///var/run/docker.sock/v1.18/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?</pre><div class="contentsignin">ログイン後にコピー</div></div>
これは、コンテナー内のプロセスが最初に Docker デーモンを見つけようとするためです。コンテナ内の /var/run/docker.sock
ディレクトリを検索しますが、このディレクトリはコンテナ内に存在しないため、このエラーが発生します。
解決策方法 1:
--privileged
パラメーターを使用します。パラメーター コンテナーには、Docker デーモンへのアクセスを含む、ホストのすべての権限を付与できます。ただし、この方法を使用すると、コンテナーがより高い権限を取得できるようになり、より大きなセキュリティ リスクが生じるため、注意して使用することをお勧めします。 docker run --privileged -v /:/host -v /var/run/docker.sock:/var/run/docker.sock <image>
方法 2: 環境変数を使用するコンテナを起動するときに、環境変数を使用して Docker デーモンのアドレスを指定し、コンテナが
docker run -v /:/host -e DOCKER_HOST=unix:///host/var/run/docker.sock <image>
方法 3: TCP 接続方法に切り替えるUnix Socket の代わりに TCP 接続を使用すると、この問題を解決できる可能性があります。 Docker デーモンの起動時に
docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock docker run -e DOCKER_HOST=172.xx.xx.xx:2375 <image>
結論
コンテナがホスト Docker を使用するときに報告されるエラーの問題は、コンテナ内のプロセスが Docker デーモン プロセスを検索するときのパスの問題によって発生します。この記事では、
--privileged パラメーターを使用する、環境変数を使用する、Docker デーモンの接続方法を変更するという 3 つの解決策を紹介します。この問題は、実際の状況に応じて適切な方法を選択することで簡単に解決できます。 以上がコンテナがホスト Docker を使用する場合のエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。