【问题标题】:Docker + PHP - ERROR: Couldn't connect to Docker daemon?Docker + PHP - 错误:无法连接到 Docker 守护进程?
【发布时间】:2017-05-15 22:47:51
【问题描述】:

我正在关注这个guide 以使用 Docker 设置 PHP 开发环境。

我在我的桌面上创建了一个文件夹 docker-php 并在其中添加了一个docker-compose.yml 文件,内容如下:

nginx:
    image: nginx:latest
    ports:
        - 80:80

在我的终端上:

$ cd /home/my-username/Desktop/docker-php/
$ docker-compose up -d

我收到此错误:

错误:无法连接到 Docker 守护进程 http+docker://localunixsocket - 正在运行吗?

如果它位于非标准位置,请指定带有 DOCKER_HOST 环境变量。

我在 Xubuntu 16.04 上。

或者我应该将文件夹放在 Docker 所需的特定位置?如果有,是哪一个?

【问题讨论】:

  • adduser YOURUSER docker
  • @opHASnoNAME 对不起,我不明白。
  • 将您的用户添加到 docker 组或尝试以 root 身份运行容器。您无法在 linux 上以“普通”用户身份访问套接字。
  • 嗯?只需尝试使用 adduser 将您的 linux 用户添加到“docker”组。
  • 嗯抱歉不知道您的设置。据我所知,Docker-Machine 未在 linux 操作系统上使用

标签: php docker docker-compose


【解决方案1】:

此错误的最常见原因是您在没有 sudo 的情况下运行了“docker-compose up”。只要安装了 docker 并且启动并运行,您可能会在 docker 命令中缺少 sudo。

【讨论】:

    【解决方案2】:

    你可以使用原生 Docker

    一种选择是放弃 docker-machine 并在您的系统上使用本机 Docker 设置。由于您使用的是 Linux (Xubuntu),因此这是您的一个选择。 docker-machine 最常用于无法在本机(Mac 或 Windows)运行 Docker 的人使用,并使用它在他们的操作系统上安装支持 Docker 的 VM 和一些本地命令来与之对话。

    您可以在 Linux here 上找到 Docker 的安装文档。

    但是,您已经安装了 docker-machine,所以这对您来说可能是最具破坏性的选择。

    您的 docker-machine 可能没有运行

    您得到的错误是说 Docker 客户端无法与服务器通信。造成这种情况的一个潜在原因是您的 docker-machine 虚拟机没有运行。您应该验证它是否正在运行,如果没有,请启动它。

    要获取您的 docker-machines 列表(可能是一个或多个):

    docker-machine ls
    

    您可能拥有一台名为 default 的机器,但您可能拥有更多机器,具体取决于您的设置方式。

    您可以通过以下方式获取当前状态:

    docker-machine status <machine-name>
    

    您可以使用stopstartrestart 来管理 docker-machine。

    (更多内容请关注Docker Machine CLI reference。)

    你需要合适的环境设置

    docker-machine 依赖于环境变量才能正常工作。因为你可能有多个 docker-machine 设置,你必须告诉客户端使用哪一个。

    要设置环境,可以从 docker-machine 命令中获取。

    docker-machine env <machine-name>
    

    你可以自动将它注入到环境中(这可能是一个有用的东西放入你的 shell 启动文件)。

    eval "$(docker-machine env <machine-name>)"
    

    你最终应该得到类似于这些的环境变量:

    DOCKER_HOST=tcp://192.168.99.101:2376
    DOCKER_CERT_PATH=/Users/nathanleclaire/.docker/machines/.client
    DOCKER_TLS_VERIFY=1
    DOCKER_MACHINE_NAME=dev
    

    请记住,您应该在此处使用 eval 形式,而不仅仅是运行 env 命令并将输出粘贴到您的 shell 设置中;它可能会在 docker-machine 重启等情况下发生变化,因此您不能依赖旧的设置来继续工作。

    如果您的 docker-machine 正在运行,并且设置了这些环境变量,那么您的 docker 和 docker-compose 命令应该工作。

    【讨论】:

    • 感谢您的回答。我不喜欢使用docker-machine。我更喜欢使用native Docker。我不想安装 virtualbox,因为它使事情变得复杂。如何删除docker-machine
    【解决方案3】:

    解决方案:

    sudo usermod -a -G docker USERNAME
    

    【讨论】:

    • 是为 docker-machine 解决的,还是在使用原生 Docker 后解决的?
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2020-06-03
    • 2017-06-14
    • 1970-01-01
    • 2016-02-07
    • 2021-10-27
    相关资源
    最近更新 更多