도커 볼륨 생성에 에러가 뜹니다..
Rocket chat을 설치하기 위해
여태껏 portainer로만 도커를 설치해오다가
처음으로 docker compose를 사용해보고 있습니다.
volumes: mongodb_data: { driver: local } services: rocketchat: image: registry.rocket.chat/rocketchat/rocket.chat:${RELEASE:-latest} restart: on-failure labels: traefik.enable: "true" traefik.http.routers.rocketchat.rule: Host(`${DOMAIN}`) traefik.http.routers.rocketchat.tls: "true" traefik.http.routers.rocketchat.entrypoints: https traefik.http.routers.rocketchat.tls.certresolver: le environment: MONGO_URL: "${MONGO_URL:-\ mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\ ${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}" MONGO_OPLOG_URL: "${MONGO_OPLOG_URL:\ -mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\ local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}" ROOT_URL: ${ROOT_URL:-http://localhost:${HOST_PORT:-3000}} PORT: ${PORT:-3000} DEPLOY_METHOD: docker DEPLOY_PLATFORM: ${DEPLOY_PLATFORM} depends_on: - mongodb expose: - ${PORT:-3000} ports: - "${BIND_IP:-0.0.0.0}:${HOST_PORT:-3000}:${PORT:-3000}" mongodb: image: docker.io/bitnami/mongodb:${MONGODB_VERSION:-4.4} restart: on-failure volumes: - mongodb_data:/bitnami/mongodb environment: MONGODB_REPLICA_SET_MODE: primary MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0} MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017} MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongodb} MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017} MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb} MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true} ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}
yml 파일 내용은 이렇습니다만
도커를 설치하려 하면
다음과 같은 에러가 뜹니다.
그래서 yml 파일에서 맨 위 둘째줄에 mongodb_data 앞 띄어진 부분을 없애고
도커를 설치하려 했더니 다음과 같은 에러가 떴습니다.
위 두개 경고야 아무것도 기입하지 않았으니 그렇다 쳐도...
volumes must be a mapping 이라 뜨는데 어찌해야하나요..?
컴포즈 버전을 명시하지 않아서 그런거 아닐까요? 첫 줄에 version: '3'을 요즘 많이 쓰긴합니다.
그리고 볼륨이야 번역해보니 무슨 일인지는 모르겟으나 볼륨의 첫 글자로 _가 오면 안되는데 _mongodb_data로 볼륨이 생성되어서 그런것 같습니다. 그 경우 위에 있는 모든 -를 빼거나(rocketchat 서비스 쪽의 depends on, expose 등) 모든 값에 -를 넣어주면서 통일해야 제대로 될 수도 있습니다.
그나저나 컴포즈 작성 방법이 되게 특이하네요. 헣..
docker-compose 2.9.0으로 해야합니다.
그리고 .env 파일이 필요하구요.
지금테스트중인데 잘 안되네요
다시했을때도 에러가뜨는건 기존에 docker-compose가 컨테이너를 만들다가 말아서 뜰수도있습니다.
portainer에 들어가서 컨테이너와 볼륨을 한번 다 삭제하고다시 실행해보시면좋을듯하네요
https://nc1004.ddns.net/s/kb4ea5WWBTQpFWx
시놀로지 도커에서 테스트 했습니다. 잘 됩니다.
docker-compose 버전은 2.9.0 으로 하라고 공홈에 나와있습니다.
역방향프록시 뒤에서 실행이 아니면 docker-compose 의 Accounts_UseDNSDomainCheck: false 내용을 삭제해주세요.
.env 파일은 어떻게 활용하나요...?? 도커 컴포즈 버전은 2.9.0이고, 콜라님 말씀대로 ./을 추가해 위의 에러는 더이상 뜨지 않습니다만 Error response from daemon: Invalid container name (-mongodb-1), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed 에러가 뜹니다ㅜㅜ
.env없이 설치 안됩니다.
docker compose.yml과.같은 디렉토리에 넣으세요
주신 env 파일과 yml 파일 같은 디렉토리에 넣고 docker-compose up -d 하는데 자꾸 위의 컨테이너 이름 에러가 뜹니다... 검색해도 잘 안나오네요
mongodb:
image: docker.io/bitnami/mongodb:${MONGODB_VERSION:-4.4}
restart: on-failure
volumes:
- mongodb_data:/bitnami/mongodb
의 - mongodb_data:/bitnami/mongodb를
- ./mongodb_data:/bitnami/mongodb로 해야 합니다.
./을 안붙이면 컴포즈 파일의 volumes의 mongodb_data를 찾게 되요.
---------------------------------------
version: "3.9"
services:
mysql:
image: mysql
volumes:
- db-data:/var/lib/mysql/data
networks:
- overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: dnsrr
volumes:
db-data:
----------------------------------------------------
이 예시에서 mysql의 volumes에는
db-data가 언급되어있죠.
이렇게 쓰면 같은 오류가 발생합니다.
왜냐하면 db-data가 무엇인지 정의 되어있지 않기 때문이죠.
그래서 services: 와 같은 층(?)에 volumes를 만들어 db-data를 명시해주어야 합니다.
db-data에 여러가지 속성을 넣을 수 있는데, 아무것도 넣지 않으면 로컬 파일이 됩니다.
docker-compose.yml 파일 내 volumes의 db-data가 아니라
docker-compose를 실행한 경로의 상대경로라고 명시하는 방법도 있습니다.
그 방법이 앞서 말씀드린, ./db-data:/var/lib/mysql/data를 사용하는 방법이 되겠습니다.
앞에 ./를 붙이니 해당 에러는 더 이상 뜨지 않습니다만, Error response from daemon: Invalid container name (-mongodb-1), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed 라는 에러가 뜹니다.... 도커 컴포즈도 2.9.0으로 업데이트한 상태인데 왜 이럴까요...?
only [a-zA-Z0-9][a-zA-Z0-9_.-]
요 부분이 regex를 알아야 하는데..
해석하자면.
이름의 첫글자는 대문자, 소문자, 숫자로 시작될수 있고
그 이후는 대소문자 숫자 _ - . 이 들어갈수 있다는 의미입니다.
이름 가장 앞의 -를 빼줘야해요
cmt alert