我正在通過 Laravel Sail 運行 docker-compose 設定,我想從容器內訪問 docker 套接字。
我已將/var/run/docker.sock套接字添加到卷中,但是當我嘗試通過 curl 訪問套接字時,它會回復curl: (7) Couldn't connect to server:
$ curl --unix-socket /var/run/docker.sock http://localhost/version
reply: curl: (7) Couldn't connect to server
這是我的 docker-compose.yml 檔案的一部分:
services:
laravel.test:
volumes:
- '.:/var/www/html'
- /var/run/docker.sock:/var/run/docker.sock
我在這里做錯了什么?
提前致謝!
uj5u.com熱心網友回復:
基本上,您正在嘗試訪問 擁有的 Unix 套接字root,因為它/var/run/docker.sock與root.
您唯一應該做的就是docker在要使用的影像中創建一個組,并將影像的用戶添加到該組,因為 Socket 也歸該docker組所有。
srw-rw---- 1 root docker 0 Jul 29 07:51 docker.sock
檔案
不要使用它,因為@David Maze 評論了創建的 Docker 組的 GID 與主機的 GID 不匹配。
FROM ...
USER root
RUN groupadd docker
RUN usermod -aG docker sail
USER sail
...
Docker Compose v3
Docker Compose 在其格式版本 v2 上有可能包含在內,group_add但這在 v3 中不再是一個選項。
即使您可以只使用 compose 的第 2 版,也可以選擇使用 v3.x 來完成。
services:
laravel.test:
user: "sail:${GIP}"
volumes:
- '.:/var/www/html'
- /var/run/docker.sock:/var/run/docker.sock
當您要使用 啟動容器時docker-compose up -d,首先匯出docker主機中組的組 ID 。
export GIP=$(cut -d: -f3 < <(getent group docker))
docker-compose up -d
然后您的sail用戶將可以訪問/var/run/docker.sock所有 Docker CLI 命令。
另外,請記住,docker組授予與root用戶等效的權限。查看Docker Daemon Attack Surface以了解可能對您的系統產生的安全影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/328760.html
