在多个本地服务中公开localhost端口

时间:2017-12-13 16:14:18

标签: docker docker-compose

我目前正在尝试使用Docker来简化我们涉及两项服务的本地开发体验,但我正在努力以正确的方式使用主机端口和容器端口。情况如下:

  • 一个包含Rails API的repo,在127.0.0.1:3000上运行(让我们称之为backend
  • 一个包含同构React / Redux前端应用程序的repo,运行于127.0.0.1:8080(让我们称之为frontend
  • 两者都有自己的Dockerfile和docker-compose.yml文件,因为它们位于不同的存储库中,并且都以docker-compose up为准。
  • 目前根本没有使用Docker进行CI或部署,计划将来使用。

我遇到的问题是,在本地开发中,frontend应用程序正在frontend容器内查找127.0.0.1:3000上的API后端,而不是backend容器。那里 - 它只对主机和实际运行Rails应用程序的backend容器可用。

是否可以将127.0.0.1:3000:3000容器的3000端口转发到前端容器?或者至少是主机的3000端口,因为我可以在我的计算机上看到本地主机上的Rails应用程序。我已经在frontend docker-compose中尝试了frontend但是在运行Rails应用程序时我无法做到这一点,因为端口正在使用并且无法连接。我想,也许我误解了这一点,或者遗漏了一些明显的东西?

文件:

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 Dockerfile

frontend

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 docker-compose.yml

backend

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 Dockerfile

backend

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 docker-compose.yml

EXEC sp_change_users_login 'Report'

2 个答案:

答案 0 :(得分:1)

您必须在一个网络中统一容器。在docker-compose.yml文件中执行此操作。

选中此docs以了解docker中的网络。

SELECT serial_number, * FROM tableName; docker-compose.yml

frontend

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

backend

Docker有自己的DNS解析,因此在您执行此操作后,您可以通过将地址设置为: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:

来连接到后端

答案 1 :(得分:1)

使用前端应用中的外部链接来解决此问题,以便链接到后端应用的默认网络,如下所示:

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