Docker-compose: não é possível construir SEM sudo, mas posso executar contêineres sem ele

1

Sobre minha máquina GNU / Linux do Ubuntu eu tento construir as imagens do meu projeto

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

E recebo o seguinte erro:

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.

Mas quando eu tento o wiuth sudo eu posso construí-los:

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

Mas acho um pouco misterioso porque posso lançá-los sem a necessidade do sudo:

docker-compose up
    
por Dimitrios Desyllas 25.12.2017 / 21:02

1 resposta

1

A causa do problema é que você tem um ponto de montagem de volume com root:root owner & grupo e causou esse comportamento.

A solução para este problema é criar um arquivo chamado .dockerignore e colocar todas as pastas montadas como volumes.

Por exemplo, se você tiver o seguinte 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'

Em seguida, você deve criar o seguinte .dockerignore :

./docker-volumes

Como você pode ver, todos os volumes estão na pasta ./docker-volumes .

Furtermore você pode encontrar soluções em: link

    
por 26.12.2017 / 11:15