GNU/Linux >> Linux Esercitazione >  >> Linux

Docker-compose:impossibile compilare SENZA sudo ma posso eseguire i contenitori senza di esso

La causa del problema è che hai un punto di montaggio del volume con root:root proprietario e gruppo e ha causato questo comportamento.

La soluzione a questo problema è creare un file chiamato .dockerignore e metti tutte le cartelle montate come volumi.

Ad esempio se hai il seguente 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'

Quindi dovresti creare il seguente .dockerignore :

./docker-volumes

Come puoi vedere tutti i volumi sono in ./docker-volumes cartella.

Inoltre puoi trovare soluzioni in:https://stackoverflow.com/questions/29101043/cant-connect-to-docker-from-docker-compose#29111083


Uno dei motivi è che qualsiasi file utilizzato per creare l'immagine docker non è di proprietà dell'utente corrente. Possiamo cambiarlo usando questo comando:

sudo chown -R $USER .

Linux
  1. Come eseguire un programma specifico come root senza una richiesta di password?

  2. In Unix, posso eseguire 'make' in una directory senza prima accedere a quella directory?

  3. Come posso usare grep per abbinare ma senza stampare le partite?

  4. Ansible:sudo senza password

  5. Impossibile eseguire Sonar Server perché Elasticsearch non può essere eseguito come root

Esegui container su Linux senza sudo in Podman

Come eseguire il comando Sudo senza password

Come eseguire comandi particolari senza password Sudo in Linux

Come eseguire comandi Sudo senza password

Ssh – Hai bisogno di un Tty per eseguire Sudo se posso Sudo senza password?

Come eseguire sudo comandi senza password