从容器内连接到 docker 套接字
Connect to docker socket from within container
我是 运行 一个 docker-compose setup via Laravel Sail 我想从容器中访问 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
我做错了什么?
提前致谢!
基本上,您正在尝试访问 root
拥有的 Unix 套接字,因为它 /var/run/docker.sock
的用户不同于 root
。
您唯一应该做的就是在您要使用的图像中创建一个组 docker
并将图像的用户添加到该组,因为套接字也由 docker
组。
srw-rw---- 1 root docker 0 Jul 29 07:51 docker.sock
Docker文件
DO NOT USE THIS, AS @David Maze COMENTED THE GID OF THE CREATED DOCKER GROUP COULD NOT MATCH THE GID FROM THE HOST.
FROM ...
USER root
RUN groupadd docker
RUN usermod -aG docker sail
USER sail
...
Docker 编写 v3
Docker Compose 在其格式版本 v2 中有可能包括 group_add
但在 v3 中不再是一个选项。
即使您可以只使用 compose 的版本 2,也可以选择使用 v3。
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 以了解可能对您的系统造成的安全影响。
我是 运行 一个 docker-compose setup via Laravel Sail 我想从容器中访问 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
我做错了什么?
提前致谢!
基本上,您正在尝试访问 root
拥有的 Unix 套接字,因为它 /var/run/docker.sock
的用户不同于 root
。
您唯一应该做的就是在您要使用的图像中创建一个组 docker
并将图像的用户添加到该组,因为套接字也由 docker
组。
srw-rw---- 1 root docker 0 Jul 29 07:51 docker.sock
Docker文件
DO NOT USE THIS, AS @David Maze COMENTED THE GID OF THE CREATED DOCKER GROUP COULD NOT MATCH THE GID FROM THE HOST.
FROM ...
USER root
RUN groupadd docker
RUN usermod -aG docker sail
USER sail
...
Docker 编写 v3
Docker Compose 在其格式版本 v2 中有可能包括 group_add
但在 v3 中不再是一个选项。
即使您可以只使用 compose 的版本 2,也可以选择使用 v3。
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 以了解可能对您的系统造成的安全影响。