使用docker-compose(以前的图)链接一个cron图像
我使用docker-compose(之前的图)像这样在docker中运行一个简单的rails应用程序:
泊坞窗,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
我需要运行一些定期的维护脚本,比如数据库备份,pingsearch引擎的站点地图等。
我不想在我的主机上使用cron,因为我更喜欢保持应用程序的可移植性,我的想法是使用docker-compose来链接一个图像,例如https://registry.hub.docker.com/u/ hamiltont / docker-cron /使用docker撰写。
rails官方镜像没有启用ssh,所以我不能只有cron容器ssh进入web容器并运行脚本。
docker-compose有一个方法让容器获得一个shell到一个链接容器来执行一些命令吗?
你真的想用你的容器做什么? 如果您需要从容器的文件系统访问某些对象,则只需将该卷挂载到辅助容器(考虑--volumes-from
选项)。
在容器之间的任何SSH交互都被认为是一种不好的做法(至less在docker exec
被执行的时候是docker exec
1.3)。 在容器中运行多个进程(例如,smth,但在你的情况下的postgres
或rails
)会导致很大的开销:为了使用sshd
和rails
你必须部署像supervisord
这样的东西。
但是如果你真的需要在容器之间提供某种非标准的交互,并且确定你真的需要它,我build议你使用一个全function的docker客户端库(如docker-py
)。 它将允许您以可编程的方式启动docker exec
。