我在尝试在主机和 Docker 容器之间使用 unix 套接字时似乎遇到了某种权限问题。
在正在运行的容器中,我有一个服务器正在侦听已安装卷上的 unix 套接字。当我尝试从容器的外部连接到套接字(使用已安装的卷)时,我收到 ECONNREFUSED 错误。我已经验证我正在谈论的是容器创建的套接字。
我假设我在这里缺少一些非常基本的东西来阻止它工作。
一些附加信息:
srwxrwxrwx
权限。Resources > File Sharing
设置中设置的我已经阅读了 Docker Compose 中卷的几乎所有参考资料,我已经阅读了几乎所有关于该主题的教程和 Stack Overflow 帖子,而且它似乎仍然存在。
任何关于为什么这可能不起作用的想法将不胜感激!
可能有不同的原因,但最有可能的是:
检查您的 Docker 容器是否使用 host 网络模式
docker inspect [container_id_or_name]
Then find the "NetworkMode" entry
在 Linux 中禁用 SELinux 或 AppArmor 模块或将它们配置为允许套接字通信。
您可以检查 SELinux 是否阻止套接字通信
/var/log/audit/audit.log
,如果阻止,请创建自定义策略模块以允许它。
grep your_socket_context /var/log/audit/audit.log | audit2allow -M my_socket_mod
semodule -i my_socket_mod.pp
另外,虽然套接字权限是srwxrwxrwx,但是您可以尝试更改套接字文件的所有者或将您的用户添加到docker组
sudo chmod 666 /var/run/docker.sock
sudo usermod -aG docker $USER
希望有帮助!