这是我第一次使用Docker,对于自己的操作是否正确感到不确定。
我的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语句?