Howto persist MongoDB - data of a running Docker container in a new image?

后端 未结 2 572
我寻月下人不归
我寻月下人不归 2021-02-04 14:08

i have a running Mongo DB Container called xyz from offical Mongo Image. i created the container with docker run -d -p 21707:21707 mongo In this container i create

相关标签:
2条回答
  • 2021-02-04 15:05

    I used docker commit and created a new image, pushed it on the docker hub. If i pull the image on a other system and create a new container from this image, there are no data like in my origin container xyz.

    The mongo docker image writes its data into a volume. As a result, those data won't be saved to a new docker image created with docker commit. docker export won't produce your data for the same reason.

    how could i reach to migrate this "xyz" running container with my sample data in a new image/container?

    What you want is either:

    • create a new container re-using the first container's volume → see --volumes-from
    • save the first container's volume data into a directory on your docker host, and create a new container mounting this directory into the container → the docker run -v option

    Also, this SO question might help you figure out volumes.

    0 讨论(0)
  • 2021-02-04 15:09

    I wanted to make an image to test things around authentication and I has the same issue. I solved it this way:

    Dockerfile

    FROM mongo
    
    COPY setup.sh /
    RUN chmod +x /setup.sh
    RUN /setup.sh
    
    ENTRYPOINT ["/usr/bin/mongod"]
    CMD ["--auth", "--dbpath=/containerdb"]
    

    setup.sh

    #!/bin/bash
    
    mkdir containerdb
    
    mongod --auth --dbpath=/containerdb &
    
    until mongo admin --eval 'db.createUser({"user":"root", "pwd":"password", "roles": [ "root" ] })'
    do
      echo 'Mongo not yet ready, waiting 1 sec until retry'
      sleep 1
    done
    
    mongod --shutdown --dbpath=/containerdb
    

    Bim! When you run this image you have a mongodb with authentication activated and a root user. The key is to workaround the VOLUME in the base Dockerfile by storing the data somewhere else.

    0 讨论(0)
提交回复
热议问题