2015-05-04 1 views
1

Я подножка простой рельсы приложение в докер с помощью докер-Compose (ранее ФПГ), как это:Использование Докер-Compose (ранее рис), чтобы связать хрон изображение

докер-compose.yml

db: 
    image: postgres 
    volumes: 
    - pgdata:/var/lib/postgresql/data 

web: 
    build: . 
    command: bundle exec rails s -b 0.0.0.0 
    volumes: 
    - .:/usr/src/app 
    ports: 
    - "3011:3000" 
    links: 
    - db 

Dockerfile

FROM rails:onbuild 

мне нужно запустить некоторые периодические охранение скрипты, такие как резервное копирование базы данных, пингом сайтмепов для поисковых систем и т.д.

Я бы предпочел не использовать cron на моей главной машине, так как я предпочитаю, чтобы приложение было переносимым, и моя идея - использовать компоновку docker для связывания изображения, такого как https://registry.hub.docker.com/u/hamiltont/docker-cron/, используя docker-compose.

Официальный сайт rails не имеет разрешения ssh, поэтому я не могу просто предоставить контейнер cron ssh в веб-контейнер и запустить скрипты.

Есть ли у docker-compose способ для контейнера получить оболочку в связанный контейнер для выполнения некоторых команд?

ответ

1

Что бы вы хотели сделать с вашими контейнерами? Если вам нужно получить доступ к некоторым объектам из файловой системы контейнера, вы должны просто установить том в вспомогательный контейнер (рассмотрите опцию --volumes-from).

Любое взаимодействие SSH между контейнерами считается плохой практикой (по крайней мере, с докеров 1.3, когда был реализован docker exec). Выполнение более одного процесса внутри контейнера (например, smth, но postgres или rails в вашем случае) приведет к большим накладным расходам: для того, чтобы иметь sshd вместе с rails, вам придется развернуть что-то вроде supervisord.

Но если вам действительно необходимо обеспечить нестандартное взаимодействие между контейнерами, и вы уверены, что вам это действительно нужно, я бы предложил вам использовать одну из полнофункциональных клиентских библиотек докеров (например, docker-py). Это позволит вам запускать docker exec программируемым способом.

+0

Благодарим вас за полезную информацию и за то, что указали мне на докер-ру. Мне просто нужно запустить несколько простых запланированных задач, таких как еженедельный sitemap.xml ping для поисковых систем, ежедневные дампы базы данных и загрузка дампа в amazon S3, отправка еженедельного электронного дайджеста зарегистрированным пользователям ... Точно обычные вещи, которые я бы установил cron в среде без докеров. – TopperH

+1

@TopperH попробуем сделать снимок следующего дизайна: mount '/ var/run/docker.sock' в контейнер' cron' и установить Docker внутри него. Вы сможете выполнять команды докеров с контейнера докеров. Если Docker CLI недостаточно, установите предпочтительную клиентскую библиотеку докеров (например, 'docker-py') в' cron'. –

+0

это звучит очень интересно. Я подожду еще немного, прежде чем принимать ваш ответ на случай, если вокруг будет готовое решение для докеров. – TopperH

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