前提・実現したいこと
docker-compose.ymlで立ち上げたアプリが二つあります。この二つのアプリ間でAPI通信を行いたいです。
###困っている事
それぞれのアプリをdocker-compose up
で立ち上げlocalhost:3000
とlocalhost:4000
でブラウザに表示出来るようになっています。そして片方のアプリで新規ユーザーを作成するとAPIを通してそのデータがもう一つのアプリで反映されるようになっています。
問題はユーザー作成時にjson parseエラーが出ることです。原因はdocker-composeで立ち上げたアプリ同士はネットワークが独立しており通信出来ないまではわかっているのですが、composeファイルの記述の仕方が分からない事です。
色々調べて試したのですが、どこがおかしいのか指摘して頂けないでしょうか?汗
お忙しい中申し訳ありません。。
###エラー内容
JSON::ParserError in StoreManagers::RegistrationsController#create
###詳しい情報
以下はディレクトリの構造です
root ┣ app1 ┃ ┝ docker-compose.yml ┃ ┗ Dockerfile ┃ ┣ app2 ┃ ┝ docker-compose.yml ┃ ┗ Dockerfile ┃ ┃
app1
とapp2
はどちらもコンテナの構成は同じで、一つのアプリにapp
、db
、web
とそれぞれの3つのコンテナから構成されています。
該当のソースコード
app1
1docker-compose.yml 2 3version: '3' 4services: 5 app: 6 build: 7 context: . 8 env_file: 9 - ./environments/db.env 10 command: bundle exec puma -C config/puma.rb 11 volumes: 12 - .:/new_reserve_app 13 - public-data:/new_reserve_app/public 14 - tmp-data:/new_reserve_app/tmp 15 - log-data:/new_reserve_app/log 16 depends_on: 17 - db 18 db: 19 image: mysql:5.7 20 environment: 21 MYSQL_ROOT_PASSWORD: password 22 MYSQL_DATABASE: root 23 volumes: 24 - db-data:/var/lib/mysql 25 web: 26 build: 27 context: containers/nginx 28 volumes: 29 - public-data:/new_reserve_app/public 30 - tmp-data:/new_reserve_app/tmp 31 ports: 32 - 3000:80 33 depends_on: 34 - app 35 tty: true 36 stdin_open: true 37 networks: 38 - smart_yoyaku_portal_site_default 39networks: 40 smart_yoyaku_portal_site_default: 41 external: true
app2
1docker-compose.yml 2 3version: '3' 4services: 5 app: 6 build: 7 context: . 8 env_file: 9 - ./environments/db.env 10 command: bundle exec puma -C config/puma.rb 11 volumes: 12 - .:/webapp 13 - public-data:/webapp/public 14 - tmp-data:/webapp/tmp 15 - log-data:/webapp/log 16 depends_on: 17 - db 18 db: 19 image: mysql:5.7 20 env_file: 21 - ./environments/db.env 22 volumes: 23 - db-data:/var/lib/mysql 24 web: 25 build: 26 context: containers/nginx 27 volumes: 28 - public-data:/webapp/public 29 - tmp-data:/webapp/tmp 30 ports: 31 - 4000:80 32 depends_on: 33 - app 34 tty: true 35 stdin_open: true 36 networks: 37 - new_reserve_app_default 38networks: 39 new_reserve_app_default: 40 external: true 41
Dockerfileは共通です
Dockerfile FROM ruby:2.6.5 # リポジトリを更新し依存モジュールをインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs # yarnパッケージ管理ツールインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ apt-get install -y nodejs # ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) RUN mkdir /webapp WORKDIR /webapp # ホストのGemfileとGemfile.lockをコンテナにコピー ADD Gemfile /webapp/Gemfile ADD Gemfile.lock /webapp/Gemfile.lock # bundle installの実行 RUN gem install bundler:2.1.4 RUN bundle install # ホストのアプリケーションディレクトリ内をすべてコンテナにコピー ADD . /webapp # puma.sockを配置するディレクトリを作成 RUN mkdir -p tmp/sockets
試したこと
######その1
docker-compose up
した時に自動で作成されるnetwork
情報を確認しdocker network ls
コマンドで確認し、docker-compose.yml
のweb
の欄にnetwork:
として書き込んだ。
そもそもweb
の欄に書き込むので合っているのか分からない。
NETWORK ID NAME DRIVER SCOPE 432ad7870bfb bridge bridge local 47b4c16713f8 host host local a8f34f823a4e new_reserve_app_default bridge local c027fb39190d none null local d834ad97970d smart_yoyaku_portal_site_default bridge local
######その2
共通のnetworkをdocker network create
で作成。そのnetworkをそれぞれのdocker-compose.yml
に書き込み、ping
コマンドで通信できているか確かめた。
ping
で通信は出来ていたがjson parseエラーが返ってきた。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/05 22:49
2020/09/06 05:27
2020/09/06 12:18
2020/09/06 12:27
2020/09/06 13:48
2020/09/06 14:03
2020/09/10 06:27