Docker-compose:没有 sudo 就无法构建,但我可以在没有 sudo 的情况下运行容器

Docker-compose:没有 sudo 就无法构建,但我可以在没有 sudo 的情况下运行容器

在我的 ubuntu GNU/Linux 机器上,我尝试从我的项目构建图像

docker-compose build --no-cache --force-rm

我收到以下错误:

ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

但是当我尝试使用 sudo 时,我可以构建它们:

sudo docker-compose build --no-cache --force-rm

但我发现它有点神秘,因为我可以启动它们而不需要 sudo:

docker-compose up

答案1

问题的原因是您有一个具有root:root所有者和组的卷安装点并导致了此行为。

此问题的解决方案是创建一个名为 的文件.dockerignore并将所有文件夹安装为卷。

例如,如果您有以下内容docker-compose.yml

version: '2'
services:
  data_map_prod:
    build:
      context: .
      dockerfile: Dockerfile
    image: 'pcmagas/data-map:latest'
    links:
      - 'neo4j'
      - 'mongodb'
    volumes:
      - './docker-volumes/app_dev:/var/log/datamap'
    ports:
      - "9780:9780"
    environment:
      NEO4J_HOST: 'neo4j'
      MONGO_CONNECTION_STRING: 'mongodb://mongodb:map'

  data_map_dev:
    build:
      context: .
      dockerfile: Dockerfile_dev
    image: 'pcmagas/data-map:dev'
    links:
      - 'neo4j_dev'
      - 'mongodb'
    volumes:
      - './src:/opt/map/src'
      - './www:/opt/map/www'
      - './package.json:/opt/map/package.json'
      - './docker-volumes/app_dev:/var/log/datamap'
    ports:
      - "9781:9780"
    environment:
      NEO4J_HOST: 'neo4j_dev'
      NEO4J_USER: 'neo4j'
      NEO4J_PASSWORD: 'neo4j'
      MONGO_CONNECTION_STRING: 'mongodb://mongodb:map_dev'

  neo4j_dev:
    image: 'neo4j'
    ports:
      - '7474:7474'
    volumes:
      - './docker-volumes/neo4j_dev/data:/data'
    environment:
      NEO4J_AUTH: 'neo4j/neo45j'

  neo4j:
    image: 'neo4j'
    volumes:
      - './docker-volumes/neo4j/data:/data'
    environment:
      NEO4J_AUTH: 'neo4j/neo45j'

  mongodb:
    image: 'mongo'
    ports:
      - '27017:27017'
    volumes:
      - './docker-volumes/mongodb/:/data/db'

然后您应该创建以下内容.dockerignore

./docker-volumes

如您所见,所有卷都在./docker-volumes文件夹中。

此外,您还可以在以下位置找到解决方案:https://stackoverflow.com/questions/29101043/cant-connect-to-docker-from-docker-compose#29111083

答案2

原因之一是用于构建 docker 映像的任何文件都不属于当前用户所有。我们可以使用以下命令更改此设置:

sudo chown -R $USER .

相关内容