how can I create a data-container only using docker-compose.yml?

前端 未结 3 1887
攒了一身酷
攒了一身酷 2020-12-29 21:53

This question is coming from an issue on the Docker\'s repository:
https://github.com/docker/compose/issues/942

I can\'t figure it out how to create a data conta

相关标签:
3条回答
  • 2020-12-29 22:29

    As mention in the issue from the OP's question:

    • you either create a data container with the same name as the one specified in the docker-compose.yml, and run docker-compose up --no-recreate (the one specified in docker-compose.yml won't be recreated).
    • or you run a container with a simple command which never returns.
      Like: tail -f /dev/null
    0 讨论(0)
  • 2020-12-29 22:32

    Exactly how to do it depends a little on what image you are using for your data-only-container. If your image has an entrypoint, you need to overwrite this in your docker-compose.yml. For example this is a solution for the official MySql image from docker hub:

    DatabaseData:
      image: mysql:5.6.25
      entrypoint: /bin/bash
    
    DatabaseServer:
      image: mysql:5.6.25
      volumes_from:
        - DatabaseData
      environment:
        MYSQL_ROOT_PASSWORD: blabla
    

    When you do a docker-compose up on this, you will get a container like ..._DatabaseData_1 which shows a status of Exited when you call docker ps -a. Further investigation with docker inspect will show, that it has a timestamp of 0. That means the container was never run. Like it is stated by the owner of docker compose here.

    Now, as long as you don't do a docker-compose rm -v, your data only container (..._DatabaseData_1) will not loose its data. So you can do docker-compose stop and docker-compose up as often as you like.

    In case you like to use a dedicated data-only image like tianon/true this works the same. Here you don't need to overwrite the entrypoint, because it doesn't exist. It seems like there are some problems with that image and docker compose. I haven't tried it, but this article could be worth reading in case you experience any problems.

    In general it seems to be a good idea to use the same image for your data-only container that you are using for the container accessing it. See Data-only container madness for more details.

    0 讨论(0)
  • 2020-12-29 22:36

    A data only container (DOC) is a container that is created only to serve as a volume provider. The container itself has no function other than that other containers can mount it's volume by using the volumes_from directive.

    The DOC has to run only once to create the volume. Other containers can reference the volumes in it even if it's stopped.

    The OP Question: The docker-compose.yml starts the DOC every time you do a docker-compose up. OP asks for an option to only create container and volume, and not run it, using some sort of an create_only: true option.

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