2015-04-10 3 views
4

У меня есть четыре контейнера, которые были node, redis, mysql и data. когда я запустил docker-compose rm, он удалит весь мой контейнер, который включает в себя контейнер data. Мои данные mysql находятся в контейнере, и я не хочу, чтобы rm контейнер data.как игнорировать некоторый контейнер, когда я запускаю `docker-compose rm`

Почему я должен использовать эти контейнеры?

Когда-нибудь я должен изменить некоторые конфигурационные файлы узла и MySQL и rebuild.So , я должен удалить контейнеры и начать заново.

Я снова искал Google снова и ничего не получал.

ответ

3

По существу, вам необходимо хранить контейнеры для данных вне Docker Compose по этой причине. Контейнер данных не должен работать в любом случае, поэтому это имеет смысл.

Таким образом, для создания данных-контейнера сделать что-то вроде:

docker run --name data mysql echo "App Data Container" 

эха команды будет завершена и контейнер будет выходить сразу, но до тех пор, пока вы не docker rm контейнера, который по-прежнему будет возможность использовать его в --volumes-from команд, так что вы можете сделать следующее в Compose:

db: 
    image: mysql 
    volumes-from: 
    - data 

И просто удалить любой код в docker-compose.yml для запуска контейнера данных.

+0

«До тех пор, пока вы не« docker rm »: это моя текущая проблема, кстати: что произойдет, когда вы используете свой контейнер (но не том): как запустить * новый * объем данных контейнер, и по-прежнему он ссылается на ваш старый (теперь многожильный) том? – VonC

+0

Вы должны выяснить, где это. Если вы запустите 'docker inspect -f {{.Volumes}} CONTAINER', вы увидите каталог для своего тома. Но в целом вы не хотите играть с сиротскими томами. Посмотрите на https://github.com/cpuguy83/docker-volumes для еще нескольких инструментов. –

+0

«В общем, вы не хотите играть с сиротскими томами». У вас есть выбор? Ваш контейнер ушел, и вы * имеете * для восстановления нового контейнера (то же имя), указывающего на старые данные. – VonC

0

@AdrianMouat Теперь я могу указать * .yml-файл, когда я запускаю весь контейнер с новой версией 1.2rc docker-compose (https://github.com/docker/compose/releases). так же, как следует:

файл: data.yml

data: image: ubuntu volumes: - "/var/lib/mysql" думает за много полезного ответа

1

Альтернативой Докер-композе, в Go (https://github.com/michaelsauter/crane), давайте вы создаете contianer группы - в том числе переопределяя по умолчанию, чтобы вы могли игнорировать свои контейнеры данных при перестройке своего приложения.

Учитывая у вас есть "crane.yaml" со следующими контейнерами и группами:

containers: 
    my-app: 
     ... 
    my-data1: 
     ... 
    my-data2: 
     ... 
groups: 
    default: 
     - "my-app" 
    data: 
     - "my-data1" 
     - "my-data2" 

Вы можете построить свои контейнеры данных сразу:

# create your data-only containers (safe to run several times) 
crane provision data # needed when building from Dockerfile 
crane create data 

# build/start your app. 
crane lift -r # similar to docker-compose build && docker compose up 

# Force re-create off your data-only containers... 
crane create --recreate data 

PS! В отличие от docker-compose, даже если вы строите из Dockerfile, вы ДОЛЖНЫ указать «образ» - когда не потянув, это имя докера даст изображение локально! Также обратите внимание, что имена контейнеров являются глобальными и не имеют префикса имени папки так, как они находятся в компоновке докеров.

Обратите внимание, что есть кратковременный крафт с краном: он просто игнорирует неправильные или неправильно написанные поля! Это затрудняет отладку докеры-составителя yaml.

+0

Возможно, я смогу использовать докер-компот и кран вместе. – jamlee

Смежные вопросы