从PHP启动Docker容器
当我尝试通过PHP启动Docker容器时,出现以下错误
level="fatal" msg="Get http:///var/run/docker.sock/v1.16/containers/json?limit=1: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?"
我尝试通过shell_exec执行docker run命令,因此Ubuntu 14.04上的执行用户是www-data。 对于好的措施,我试图运行docker命令作为sudo,但没有任何区别。 search“您正在尝试….”出现几个链接,可能有一些相关的信息 – 例如在这里 – 但我还没有能够很好地理解它。
也是为了好的措施,我输出docker comamnd我试图执行stderr,复制它并通过SSH直接执行它。 这是命令
docker run -h user118 -d -p 8406:443 -v /var/docks/user118/logs:/var/log/apache2 -v /var/docks/user118/mysql:/var/lib/mysql -v /var/docks/user118/redis:/var/lib/redis -v /var/docks/user118/secure:/var/secure -v /var/docks/user118/site:/var/www/html lamp
其次是
docker ps -a
然后浏览到该容器 – 没有问题,一切正常。
我知道,命令将引发“你应该只有一个应用程序每个容器”的评论。 这不是这个问题。
我试图在这里不可能或者有一个相对简单的方法来通过PHP脚本和shell_exec来操作docker吗? 我会很感激任何帮助
我想你可以通过添加www-data
用户到docker
组来解决这个问题。
从https://docs.docker.com/installation/ubuntulinux/#giving-non-root-access :
授予非root用户访问权限
docker守护程序始终以root用户身份运行,并且自从Docker版本0.5.2以来,docker守护进程绑定到Unix套接字而不是TCP端口。 默认情况下,Unix套接字由用户root拥有,因此,默认情况下,您可以使用sudo访问它。
从版本0.5.3开始,如果你(或你的Docker安装程序)创build一个名为docker的Unix组并向其添加用户,那么当守护进程启动时,docker守护进程将使docker组读/写的Unix套接字的所有权。 docker守护程序必须始终以root用户身份运行,但是如果您在docker组中以用户身份运行docker客户端,则不需要将sudo添加到所有客户端命令。 从0.9.0开始,可以指定docker以外的组拥有带-G选项的Unix套接字。
例:
-
如果docker组不存在,则添加docker组。
sudo groupadd docker
-
将连接的用户“$ {USER}”添加到泊坞窗组中。 更改用户名称以匹配您的首选用户。
sudo gpasswd -a ${USER} docker
-
重新启动Docker守护进程:
sudo service docker restart
-
如果你在Ubuntu 14.04上使用
docker.io
代替:sudo service docker.io restart
-
执行
newgrp docker
或者注销/激活对组的更改。
我发布这个答案,而不是作为一个评论,因为它确实解决了这个问题。 但是,我对解决scheme有所保留,所以我希望在这里会有其他答案。 我通过添加修改了sudoers
www-data hostname =(ALL)NOPASSWD:ALL Defaults!requiretty
它提供了一个完整的解决scheme – 我现在可以从PHP脚本启动Docker容器。 Allv非常好,但是我也有一些关于这种方式来放松sudoers的问题。 所有这一切正在发生的环境是受到控制的,但即使如此,听起来也是一个远远完美的解决scheme。
我试图用NOPASSWD:/ path / to / scriptreplaceNOPASSWD:ALL,但是这样做不起作用,因为预期的是NOPASSWD:应用程序。
如果任何人都能提出一种提供更安全解决scheme的方法,我将非常感激。
- 在Linux上使用Docker进行Asp.Net 5.0开发
- 是否有可能在SqlAlchemy中通过名称连接到dockerdb容器?
- 如何增加Docker上的cpu数量
- 重启命令后,如何从命令重启机器后继续执行bash脚本?
- 如何将mongoconfiguration为在Docker中运行以在Windows上使用外部驱动器
- 是否有可能在Docker容器中使用cloud-init和heat-cfntools?
- 这个docker服务是否暴露在互联网上?
- 无法拉在redhat 7.1上的任何docker图像
- 大厅CIpipe道给错误: – 获取https://registry-1.docker.io/v2:净/ HTTP:请求在等待连接时取消