2017-12-13 7 views
0

私は現在、Dockerを使って2つのサービスを含むローカル開発環境を簡単にしようとしていますが、ホストとコンテナのポートを正しい方法で使用するのには苦労しています。複数のローカルサービスにlocalhostポートを公開する

  • 一つのレポは、RailsのAPIを含む127.0.0.1:3000上で実行されている同型が127.0.0.1上で実行して、/ Reduxのフロントエンドアプリに反応含む
  • 一つレポ(このbackendを呼び出すことができます):ここでは状況があります: 8080(これをfrontendと呼ぶことができます)
  • 両方とも、独自のDockerfileとdocker-compose.ymlファイルが別々のreposにあるので、両方ともdocker-compose upで始まります。
  • 現在、CIまたはデプロイメントのためにDockerを使用しておらず、今後予定しています。

私がいる問題は、地域の発展にfrontendアプリはありませんfrontendコンテナ内から127.0.0.1:3000のAPIのバックエンドを探しているということである - それはホストにのみ利用可能です実際にRailsアプリケーションを実行しているコンテナbackendがあります。

backendコンテナの3000ポートをフロントエンドコンテナに転送することはできますか。あるいは、少なくともホストの3000ポートで、私のコンピュータ上のlocalhostにRailsアプリケーションが見えるようになります。私はのfrontendドッカーを作成しようとしましたが、Railsアプリケーションの実行中にそのポートが使用中で接続に失敗しているため、実行できません。おそらく私はその点を誤解しているか、何か明白なものがないと思っていますか?

ファイル:

frontend Dockerfile

FROM node:8.7.0 
RUN npm install --global --silent webpack yarn 
RUN mkdir /app 
WORKDIR /app 
COPY package.json /app/package.json 
COPY yarn.lock /app/yarn.lock 
RUN yarn install 
COPY . /app 

frontendドッキングウィンドウ-compose.yml

version: '3' 
services: 
    web: 
    build: . 
    command: yarn start:dev 
    volumes: 
     - .:/app 
    ports: 
     - '8080:8080' 
     - '127.0.0.1:3000:3000' # rails backend exposed to localhost within container 

backend Dockerfile

FROM ruby:2.4.2 
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 
RUN mkdir /app 
WORKDIR /app 
COPY Gemfile /app/Gemfile 
COPY Gemfile.lock /app/Gemfile.lock 
RUN bundle install 
COPY . /app 

backendドッキングウィンドウ-compose.yml

version: '3' 

volumes: 
    postgres-data: 
    driver: local 

services: 
    postgres: 
    image: postgres:9.6 
    volumes: 
     - postgres-data:/var/lib/postgresql/data 
    web: 
    build: . 
    command: bundle exec rails s -p 3000 -b '0.0.0.0' 
    volumes: 
     - .:/app 
    ports: 
     - '3000:3000' 
    depends_on: 
     - postgres 

答えて

0

そのようなバックエンドアプリケーションのデフォルトのネットワークにリンクするアプリ:あなたが一緒にこれらのドッキングウィンドウ・コンファイルを実行する必要がある場合には

version: '3' 
services: 
    web: 
    build: . 
    command: yarn start:dev 
    environment: 
     - API_HOST=http://backend_web_1:3000 
    external_links: 
     - backend_default 
    networks: 
     - default 
     - backend_default 
    ports: 
     - '8080:8080' 
    volumes: 
     - .:/app 

networks: 
    backend_default: # share with backend app 
    external: true 
0

あなたは1つのネットワーク内のコンテナを団結しなければなりません。あなたのdocker-compose.ymlファイルでそれを行います。

ドッカーのネットワークについてはdocsをご確認ください。

frontendドッキングウィンドウ-compose.yml

version: '3' 
services: 
    gui: 
    build: . 
    command: yarn start:dev 
    volumes: 
     - .:/app 
    ports: 
     - '8080:8080' 
     - '127.0.0.1:3000:3000' 
    networks: 
     - webnet 

networks: 
    webnet: 

backendドッカ-構成します。YML

version: '3' 

volumes: 
    postgres-data: 
    driver: local 

services: 
    postgres: 
    image: postgres:9.6 
    volumes: 
     - postgres-data:/var/lib/postgresql/data 
    back: 
    build: . 
    command: bundle exec rails s -p 3000 -b '0.0.0.0' 
    volumes: 
     - .:/app 
    ports: 
     - '3000:3000' 
    depends_on: 
     - postgres 


     networks: 
      - webnet 

networks: 
    webnet: 

ドッカーは独自のDNS解決を持っているので、あなたがこれを行った後、あなたがにアドレスを設定することにより、バックエンドに接続することができます:http://back:3000フロントエンドでは、この使用して外部リンクを解決するために管理

+0

は、それがこのよう 'ドッキングウィンドウ-構成-fドッキングウィンドウ-compose.yml -fを行っていますdocker-compose.prod.yml up -d' –

+0

返信いただきありがとうございます!私は上記を試しましたが、 'frontend_webnet'と' backend_webnet'という2つのネットワークを作成しました。何らかのエイリアスを使用する必要がありますか?またはおそらく外部リンクですか? – redroot

+0

上記のように、両方のコマンドを1つのコマンドで起動してみましたか? –

関連する問題