Это моя первая работа с Докером, и я не уверен, что я хорошо делаю.
У меня есть приложения rails, которые зависят от базы данных 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)
Это звучит нормально, потому что я подозреваю, что перед <контейнером > , который привязан к 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 перед созданием любого контейнера?