Ces dernières années, Docker est devenu de plus en plus populaire en tant que solution de conteneurisation efficace. Cependant, certains problèmes surviennent également lors de l'utilisation de Docker pour un déploiement conteneurisé. Par exemple, lors de l'accès à l'hôte à l'intérieur du conteneur, le conteneur signalera une erreur en utilisant le Docker hôte. Cet article explique la cause de ce problème et comment le résoudre.
Lorsque vous utilisez Docker pour déployer des applications, vous devez parfois accéder au système de fichiers hôte ou au démon Docker de l'hôte depuis l'intérieur du conteneur. Généralement, en ajoutant -v /:/host
et -v /var/run/docker.sock:/var/run/docker.sock
lors du démarrage des paramètres du conteneur pour réaliser cette fonction. Cependant, dans certains cas, lorsque le conteneur tente d'accéder au démon Docker hôte, un message d'erreur similaire au suivant apparaîtra : -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
, mais ce répertoire n'existe pas à l'intérieur du conteneur, cette erreur se produira donc. 🎜🎜Solution🎜--privileged
--privileged
pour autoriser le conteneur avoir un hôte Toutes les autorisations de l'hôte, y compris l'accès au démon Docker. Cependant, l'utilisation de cette méthode permettra au conteneur d'obtenir des autorisations plus élevées et présentera de plus grands risques de sécurité, il est donc recommandé de l'utiliser avec prudence. 🎜rrreee/var/run/docker .sock
Recherchez le processus du démon Docker. 🎜rrreee-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
lors du démarrage du démon Docker, puis utiliser DOCKER_HOST dans la variable d'environnement du conteneur
pour spécifier l'utilisation de TCP pour se connecter au démon Docker. 🎜rrreee🎜Conclusion🎜🎜Le problème des erreurs signalées lorsque le conteneur utilise le Docker hôte est causé par le problème de chemin lorsque le processus dans le conteneur recherche le processus du démon Docker. Cet article décrit trois solutions : utiliser le paramètre --privileged
, utiliser des variables d'environnement et modifier la méthode de connexion du démon Docker. Ce problème peut être facilement résolu en choisissant la méthode appropriée en fonction de la situation réelle. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!