1

次のように docker-compose (以前の図) を使用して、docker で単純な Rails アプリを実行しています。

docker-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

データベースのバックアップ、検索エンジンへのサイトマップの ping など、定期的なメンテナンス スクリプトを実行する必要があります。

ホスト マシンで cron を使用したくないのは、アプリケーションの移植性を維持したいからです。私の考えは、https: //registry.hub.docker.com/u/ などのイメージをリンクするために docker-compose を使用することです。 hamiltont/docker-cron/ docker-compose を使用します。

Rails の公式イメージでは ssh が有効になっていないため、cron コンテナーを使用して Web コンテナーに ssh し、スクリプトを実行することはできません。

docker-compose には、コンテナがリンクされたコンテナにシェルを取得していくつかのコマンドを実行する方法がありますか?

4

1 に答える 1

1

コンテナで実際に何をしたいですか?コンテナーのファイル システムからいくつかのオブジェクトにアクセスする必要がある場合は、ボリュームを補助コンテナーにマウントする必要があります (--volumes-fromオプションを検討してください)。

コンテナー間の SSH 対話は、悪い習慣と見なされます (少なくとも docker 1.3docker execが実装されてから)。コンテナー内で複数のプロセスを実行すると (例: smth ですが、あなたの場合はpostgresor rails)、大きなオーバーヘッドが発生sshdrailsますsupervisord

しかし、コンテナ間である種の非標準的な相互作用を提供する必要があり、それが本当に必要であると確信している場合は、フル機能の docker クライアント ライブラリの 1 つ ( などdocker-py) を使用することをお勧めします。プログラム可能な方法で起動できるようになりますdocker exec

于 2015-05-04T19:58:29.523 に答える