Dockerと仕事をするのは初めてです。私がうまくやっているかどうかはわかりません。Docker、イメージ内の.sqlファイルを実行するには?
私はMySQLのデータベースに依存して、レールのアプリケーションを持っているので、私はこのようなdocker-compose.yml
ファイル設定した:私は次のことを実行した場合、その後
db:
image: library/mysql:5.6
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
expose:
- "3306"
ports:
- "3306:3306"
rails-app:
build: .
dockerfile: Dockerfile
environment:
RAILS_ENV: development
links:
- db
volumes:
- ".:/home/app"
volumes_from:
- bundle
... omitted lines ...
を:
$ docker-compose run db mysql --host=$DOCKER_LOCALHOST --port=3306 --protocol=tcp -u root < shared/create_common_tables.sql
このエラーが発生します:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.99.100' (111)
このsouなぜなら、db
にリンクするいくつかのコンテナの前に私はbuild
を持っていなければならないと思うからです。
私はこの順序でこれを実行する場合ので、私はこれを知っている:
$ docker-compose build rails-app
$ docker-compose run -e RAILS_ENV=development rails-app bundle
$ docker-compose run -e RAILS_ENV=development rails-app bundle exec rake db:create
$ docker-compose run db mysql --host=$DOCKER_LOCALHOST --port=3306 --protocol=tcp -u root < shared/create_common_tables.sql
それは正常に動作します。
ただし、コンテナを作成する前にこのsqlを実行するにはどうすればよいですか?
MySQLドッカーイメージには、新しいコンテナをデータで初期化するメカニズムが既に用意されています。 /docker-entrypoint-initdb.dからすべての.shと.sqlファイルをロードするだけで、COPYまたはホストからそのディレクトリへのマウントが必要です。 「新しいインスタンスの初期化」のhttps://hub.docker.com/_/mysql/を参照してください。 – diwo
はい、そのメカニズムは、「作成する前にこのSQLを実行するにはどうすればよいですか?コンテナ"。個人的には、エントリーポイントの一部としての装備品のローディングは良い解決策だとは思わない。コンテナを作成するたびにプロセスを繰り返す必要があるため、起動時間が大幅に遅くなります。 – dnephin