docker-composeを使って構築する時にハマったところ
ホストマシン(Macのローカル環境)とDockerコンテナとのやりとり
- ports ( -pオプション)でやりとりできるのはホストマシンのPortをマッピングする
なので
Dockerコンテナ同士のPortをマッピングしているわけではない
例えば、MySQLのコンテナ(Port:3306)にホストマシンからアクセスできるからといって、Railsを動かしているコンテナからアクセスはできない。
ホストマシン : mysql -h127.0.0.1 -uroot => OK
Railsコンテナ : mysql -h 127.0.0.1 -uroot => NG
linksを使って指定すれば、名前解決できるのでそれを使ってアクセスする
links:
- mysql
Railsコンテナ : mysql -h mysql -uroot => OK
RailsアプリのMySQLへの接続、Redisへの接続などはホスト名の指定方法を変更する必要がある!!
修正前
database.yml
host: localhost
development.rb
config.session_store :redis_store,
servers: 'redis://localhost:6379/0',
修正後
database.yml
url: mysql2://root:@mysql:3306
development.rb
config.session_store :redis_store,
servers: 'redis://redis:6379/0',
Railsアプリの共有方法
ディレクトリ構成を以下のようにしていた
任意のディレクトリ/RailsApp/
Gemfile
app
bin
config
db
docker-compose/
nginx/
Dockerfile
app.conf
app/
Dockerfile
docker-compose.yml
そうすると、appのDockerfileに書くRailsAppのパスが親のパスになるため、Permissionエラーとなる
COPY .. /app