How to share data between host and containers using volumes in Docker Compose
It looks like you are trying to define a "data container". This pattern used to be common, but this isn't necessary after the docker volume
system was added in Docker 1.9 (https://github.com/docker/docker/blob/master/CHANGELOG.md#190-2015-11-03)
This image that you are using, tianon/true
, is designed to run the "true" command, which does nothing other than return exit code 0, and then exit. This is why the container is showing as exited.
Instead of using data containers, use a named volume. For example, the following approach using a data container:
docker create --name data-container -v /sessions tianon/truedocker run --volume-from data-container -d myapp
becomes this:
docker volume create --name sessionsdocker run -v sessions:/sessions -d myapp
Since you are using compose, you can define volumes using the volumes key.
version: '2'services: php-apache: env_file: - dev_variables.env image: reypm/php55-dev build: context: . args: - PUID=1000 - PGID=1000 expose: - "80" - "9001" extra_hosts: # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts) - "dockerhost:xxx.xxx.xxx.xxx" volumes: - sessions:/sessions - docroot:/var/wwwvolumes: sessions: driver: local docroot: driver: local
Full details and an example are located here: https://docs.docker.com/compose/compose-file/compose-file-v2/
However, you also mentioned wanting to share this volume data between the container and your host. In that case, neither a data container nor named volume is necessary. You can just specify a host volume directly:
version: '2'services: php-apache: env_file: - dev_variables.env image: reypm/php55-dev build: context: . args: - PUID=1000 - PGID=1000 expose: - "80" - "9001" extra_hosts: # IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts) - "dockerhost:xxx.xxx.xxx.xxx" volumes: - ./data/sessions:/sessions - ../:/var/www