Heim > Artikel > Betrieb und Instandhaltung > So beheben Sie den Fehler, wenn der Container den Host-Docker verwendet
In den letzten Jahren ist Docker als effiziente Containerisierungslösung immer beliebter geworden. Bei der Verwendung von Docker für die Containerbereitstellung treten jedoch auch einige Probleme auf. Wenn beispielsweise aus dem Container heraus auf den Hostcomputer zugegriffen wird, meldet der Container über den Host-Docker einen Fehler. In diesem Artikel wird die Ursache dieses Problems erläutert und wie es behoben werden kann.
Bei der Verwendung von Docker zum Bereitstellen von Anwendungen ist es manchmal erforderlich, vom Container aus auf das Host-Dateisystem oder den Docker-Daemon des Hosts zuzugreifen. Normalerweise durch Hinzufügen von -v /:/host
und -v /var/run/docker.sock:/var/run/docker.sock
beim Starten der Containerparameter diese Funktion erreichen. Wenn der Container jedoch versucht, auf den Host-Docker-Daemon zuzugreifen, wird in einigen Fällen eine Fehlermeldung ähnlich der folgenden angezeigt: -v /:/host
和 -v /var/run/docker.sock:/var/run/docker.sock
参数来实现这一功能。但是在某些情况下,当容器尝试访问宿主机 Docker daemon 时,会出现类似以下错误的信息:
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?
这是因为容器中的进程在寻找 Docker daemon 的进程时,会先尝试在容器内部的 /var/run/docker.sock
目录下寻找,而该目录在容器内部是不存在的,于是就会导致该错误的出现。
--privileged
参数在启动容器时,使用 --privileged
参数可以让容器拥有宿主机的所有权限,包括访问 Docker daemon。但是使用该方式会让容器获得更高的权限,安全风险较大,因此建议慎重使用。
docker run --privileged -v /:/host -v /var/run/docker.sock:/var/run/docker.sock <image>
在启动容器时,可以使用环境变量来指定 Docker daemon 的地址,从而避免容器在 /var/run/docker.sock
上寻找 Docker daemon 的进程。
docker run -v /:/host -e DOCKER_HOST=unix:///host/var/run/docker.sock <image>
不使用 Unix Socket 而使用 TCP 连接的方式也可以解决这个问题。需要在启动 Docker daemon 时添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
参数,然后在容器中使用 DOCKER_HOST
环境变量来指定使用 TCP 连接 Docker daemon。
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 daemon 的进程时的路径问题导致的。本文介绍了三种解决方法:使用 --privileged
rrreee
/var/run/docker.sock
, aber dieses Verzeichnis existiert nicht im Container, daher wird dieser Fehler auftreten. 🎜🎜Lösung🎜--privileged
--privileged
, um den Container zuzulassen um einen Host zu haben Alle Berechtigungen des Hosts, einschließlich Zugriff auf den Docker-Daemon. Durch die Verwendung dieser Methode erhält der Container jedoch höhere Berechtigungen und birgt größere Sicherheitsrisiken. Daher wird empfohlen, sie mit Vorsicht zu verwenden. 🎜rrreee/var/run/docker befindet .sock
Finden Sie den Prozess des Docker-Daemons. 🎜rrreee-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
hinzufügen und dann verwenden DOCKER_HOST in der Umgebungsvariablen
des Containers, um die Verwendung von TCP für die Verbindung mit dem Docker-Daemon anzugeben. 🎜rrreee🎜Fazit🎜🎜Das Problem der gemeldeten Fehler, wenn der Container den Host Docker verwendet, wird durch das Pfadproblem verursacht, wenn der Prozess im Container nach dem Prozess des Docker-Daemons sucht. In diesem Artikel werden drei Lösungen beschrieben: die Verwendung des Parameters --privileged
, die Verwendung von Umgebungsvariablen und das Ändern der Verbindungsmethode des Docker-Daemons. Dieses Problem kann leicht gelöst werden, indem die geeignete Methode entsprechend der tatsächlichen Situation ausgewählt wird. 🎜Das obige ist der detaillierte Inhalt vonSo beheben Sie den Fehler, wenn der Container den Host-Docker verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!