Ответ 1
Похоже, вы пытаетесь определить "контейнер данных". Этот шаблон был обычным явлением, но это не обязательно после того, как система docker volume
была добавлена в Docker 1.9 (https://github.com/docker/docker/blob/master/CHANGELOG.md#190-2015-11-03)
Это изображение, которое вы используете, tianon/true
, предназначено для запуска команды "истина", которая ничего не делает, кроме кода возврата 0, а затем выходит. Вот почему контейнер отображается как завершенный.
Вместо использования контейнеров данных используйте именованный том. Например, следующий подход с использованием контейнера данных:
docker create --name data-container -v /sessions tianon/true
docker run --volume-from data-container -d myapp
становится следующим:
docker volume create --name sessions
docker run -v sessions:/sessions -d myapp
Поскольку вы используете compose, вы можете определять тома с помощью клавиши томов.
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/www
volumes:
sessions:
driver: local
docroot:
driver: local
Подробная информация и пример находятся здесь: https://docs.docker.com/compose/compose-file/compose-file-v2/
Однако вы также упомянули, что хотите поделиться этими данными тома между контейнером и вашим хостом. В этом случае не требуется ни контейнер данных, ни названный том. Вы можете просто указать хост-объем напрямую:
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