2016-12-23 17 views
5

Я новичок в Docker, и я пытаюсь выяснить, как установить имя созданного тома данных. В настоящее время каталог автоматически называется длинным хэшем в/var/libs/docker, который далек от удобства использования.Как назвать том с помощью файла docker-compose.yml?

Я пытаюсь настроить среду разработки для MODX, как показано здесь: https://github.com/modxcms/docker-modx

В настоящее время мой докер-compose.yml файл следующим образом:

web: 
    image: modx 
    links: 
    - db:mysql 
    ports: 
    - 80:80 
db: 
    image: mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: example 
    ports: 
    - 3306:3306 
    command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION 
myadmin: 
    image: phpmyadmin/phpmyadmin 
    links: 
    - db:db 
    ports: 
    - 8080:8080 

Это работает отлично, но я 'uns unsure относительно того, как назвать том данных, который я бы редактировал непосредственно с моей IDE.

(В качестве побочного вопроса, это должен быть создан в/вар/LIBS/докер Или есть способ установить его в каталог в моей домашней папке?)

Обновление: Благодаря помощи от @juliano Я обновил свой Докер-compose.yml файл:

version: '2' 

services: 
    web: 
     image: modx 
     volumes: 
     - html:/home/muzzstick/dev/modxdev 
     links: 
     - db:mysql 
     ports: 
     - 80:80 
    db: 
     image: mysql 
     environment: 
     MYSQL_ROOT_PASSWORD: example 
     ports: 
     - 3306:3306 
     command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION 
    myadmin: 
     image: phpmyadmin/phpmyadmin 
     links: 
     - db:db 
     ports: 
     - 8080:8080 

volumes: 
    html: 
     external: false 

к сожалению, это, кажется, чтобы остановить веб-контейнер от бега. Контейнеры db и myadmin показывают, что они работают нормально. Не было никаких ошибок ... если я нахожу docker start docker_web_1, он, кажется, начинается, но docker ps -a показывает, что он вышел, как только он запустился.

Update 2

Запуск docker-compose up -d появляется запустить без проблем. Но тогда, как вы можете видеть ниже, веб-контейнер выходит, как только он создается.

CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS      PORTS       NAMES 
a1dd6d8ac94e  modx     "/entrypoint.sh apach" 10 seconds ago  Exited (1) 5 seconds ago         docker_web_1 
ee812ae858dc  phpmyadmin/phpmyadmin "/run.sh phpmyadmin"  10 seconds ago  Up 5 seconds    80/tcp, 0.0.0.0:8080->8080/tcp docker_myadmin_1 
db496134e0cf  mysql     "docker-entrypoint.sh" 11 seconds ago  Up 10 seconds    0.0.0.0:3306->3306/tcp   docker_db_1 

Update 3 OK журналы ошибки для этого контейнера показывает:

error: missing MODX_DB_HOST and MYSQL_PORT_3306_TCP environment variables 
Did you forget to --link some_mysql_container:mysql or set an external db 
with -e MODX_DB_HOST=hostname:port? 

Эта ошибка появляется, чтобы быть происходящими из https://github.com/modxcms/docker-modx/blob/master/apache/docker-entrypoint.sh#L15-L20

Может быть что-то вроде связывания обрабатываются по-разному в docker-compose version 2?

+0

Что происходит, когда вы запускаете 'docker-compose up'? –

+0

Он тянет различные изображения, как ожидалось, и создает контейнеры. Но веб-контейнер выходит почти сразу, как вы можете видеть в моем обновлении выше. – Muzzstick

ответ

8

Чтобы создать именованный объем данных с использованием version 2 of compose files вы будете иметь отделенный площадь:

version: '2' 

services: 
    db: 
    image: postgres 
    volumes: 
     - amazingvolume:/var/lib/postgresql/data 

volumes: 
    amazingvolume: 
    external: true 

Таким образом, вы можете определить имя тома (amazingvolume), если это external or not и под вашим услугам (дб в данном примере) вы можете определить, какой каталог вы собираетесь монтировать.

+0

, если мы идем таким образом, мы не можем редактировать файлы в каталоге томов (который будет установлен в физическое расположение файла). Это не было бы хорошим примером для разработчиков, которым необходимо локально тестировать/разрабатывать файлы, правильно? – blackhawk

1

Просто поиск в документации Docker для размещенных смонтированных томов:

version: '2' 

services: 
    web: 
    image: modx 
    environment: 
     - MYSQL_PORT_3306_TCP=3306 
     - MODX_DB_HOST=mysql:3306 
    volumes: 
     - /home/muzzstick/dev/modxdev/html:/var/www/html 

    links: 
     - db:mysql 
    ports: 
     - 80:80 
    db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: example 
    ports: 
     - 3306:3306 
    command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION 
    myadmin: 
    image: phpmyadmin/phpmyadmin 
    links: 
     - db:db 
    ports: 
     - 8080:8080 

Изменить /var/www/html в каталог, где HTML файлы будут находиться внутри контейнера. А также создайте каталог слева на своем хосте и дайте разрешение на чтение всем пользователям.

С уважением

+0

Привет, спасибо. Я тоже пробовал это, но у него такая же проблема, как, например, в моем обновленном вопросе. Веб-контейнер немедленно выйдет. – Muzzstick

+0

И что он говорит в журналах? docker logs containsername –

+0

Спасибо Карлос, я добавил сообщение об ошибке выше. – Muzzstick