![Docker-compose: sudo 없이는 빌드할 수 없지만 sudo 없이 컨테이너를 실행할 수 있습니다.](https://linux55.com/image/124413/Docker-compose%3A%20sudo%20%EC%97%86%EC%9D%B4%EB%8A%94%20%EB%B9%8C%EB%93%9C%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%A7%80%EB%A7%8C%20sudo%20%EC%97%86%EC%9D%B4%20%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 우분투 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 .