programing

도커 Mongo 데이터 볼륨 설정 방법

bestprogram 2023. 3. 8. 21:54

도커 Mongo 데이터 볼륨 설정 방법

Dockerizing MongoDB를 사용하여 로컬 볼륨에 데이터를 저장하고 싶습니다.

하지만.. 실패했어...

정말 그랬어요.mongo:latest이미지들

kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mongo               latest              b11eedbc330f        2 weeks ago         317.4 MB
ubuntu              latest              6cc0fc2a5ee3        3 weeks ago         187.9 MB

모노 데이터를 저장하고 싶다.~/data그래서...

kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43

하지만... 소용없어...

도커 ps -- 데몬 mongo 없음

kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

"mongo" --mongo를 실행하려고 합니다.

kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running

도커 검사 몽고

kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
    "Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
    "Created": "2016-02-15T02:19:01.617824401Z",
    "Path": "/entrypoint.sh",
    "Args": [
        "mongod"
    ],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 100,
        "Error": "",
        "StartedAt": "2016-02-15T02:19:01.74102535Z",
        "FinishedAt": "2016-02-15T02:19:01.806376434Z"
    },




"Mounts": [
        {
            "Source": "/Users/hushuming/data",
            "Destination": "/data/db",
            "Mode": "",
            "RW": true
        },
        {
            "Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
            "Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
            "Destination": "/data/configdb",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

데이터 볼륨을 설정하지 않으면 mongo 이미지가 동작합니다!

그러나 데이터 볼륨을 설정할 때는 설정할 수 없습니다.누가 나를 도울수 있을까?

도커 로그를 확인하여 컨테이너가 정지했을 때 무슨 일이 일어났는지 확인하고 "Existed" 모드로 전환합니다.

볼륨의 풀 패스를 지정하는 것이 도움이 되는지도 참조해 주세요.

docker run -p 27017:27017 -v /home/<user>/data:/data/db  ...

OP는 다음을 추가합니다.

docker logs mongo 
exception in initAndListen: 98 
Unable to create/open lock file: /data/db/mongod.lock 
errno:13 Permission denied 
Is a mongod instance already running?
terminating 2016-02-15T06:19:17.638+0000 
I CONTROL [initandlisten] dbexit: rc: 100 

errno:13이 문제 30에 관한 입니다.

코멘트는 다음과 같습니다.

이 문제는 파일 소유권/허가 문제(이 도커 이미지와 관련이 없음)로, VB를 사용하는 boot2docker 또는 VB를 사용하는 vagrant box 중 하나입니다.

그럼에도 불구하고 소유권을 해킹하여 boot2docker 내의 /Users 공유 볼륨을 uid 999gid 999(mongo docker 이미지가 사용하는 것)에 다시 마운트하여 시작하도록 했습니다.

$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users

그러나... 지원되지 않는 파일 시스템 유형으로 인해 mongod가 크래시됨(vboxsf에서는 mmap이 작동하지 않음)

따라서 실제 솔루션은 DVC: Data Volume Container를 사용해 보는 것입니다.현시점에서는 mongodb 문서에 다음과 같은 내용이 기재되어 있습니다.

MongoDB에는 다음 기능을 지원하는 파일 시스템이 필요합니다.fsync()디렉토리에 있습니다.
예를 들어 HGFS 및 Virtual Box의 공유 폴더는 이 작업을 지원하지 않습니다.

그래서:

가상 박스 공유 폴더는 동작하기 때문에 MongoDB에서는 OSX에 마운트할 수 없습니다.


DVC(데이터 볼륨 컨테이너)의 경우는, 다음의 순서에 따릅니다.

docker volume create mongodbdata

다음으로 다음과 같이 사용합니다.

docker run -p 27017:27017 -v mongodbdata:/data/db  ...    

그리고 그게 더 잘 먹힐지 봐.

댓글에서 언급했듯이:

A docker volume inspect mongodbdata(을 참조) 경로가 표시됩니다(필요한 경우 백업 가능).

도커별 문서 수:

볼륨은 도커 컨테이너에 의해 생성되어 도커 컨테이너에 의해 사용되는 데이터를 유지하는 데 선호되는 메커니즘입니다.

docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo

도커 구성 경유:

version: '2'
    services:
      mongodb:
        image: mongo:latest
        volumes:
          - ./<your-local-path>:/data/db

/data/db컨테이너에 저장된 데이터의 위치입니다.

<your-local-path>는 실제 데이터베이스 저널파일이 저장되는 호스트머신 AKA 상의 위치입니다.

Windows 상에서 MongoDB 컨테이너를 실행하고 있는 모든 사용자:여기서 설명한 바와 같이 Windows 호스트에서 MongoDB 컨테이너로 볼륨을 마운트할 때 문제가 발생합니다(이것을 Path라고 부릅니다).local volume를 참조해 주세요.

할 수 .Docker volume 관리되는 (도커에 의해 관리됨):

docker volume create mongodata

★★★★★★★★★★★★★★★★★docker-compose★★★★★★★★★★★★★★★★★★★★:

version: "3.4"

services:
  ....
  
  db:
    image: mongo
    volumes:
      - mongodata:/data/db
    restart: unless-stopped
 
volumes:
  mongodata:

Windows 10에서 테스트하여 동작

링크를 찾았습니다.가상 박스 공유 폴더는 mongodb에서 지원되지 않습니다.

언급URL : https://stackoverflow.com/questions/35400740/how-to-set-docker-mongo-data-volume