Railsの開発環境をDockerで作った時にハマったところ Rails, Nginx, Redis, MySQL

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
 
なのでdocker-compose.ymlとRailsアプリのDockerファイルはルートディレクトリに置くようにした



0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...