我目前正在尝试使用Docker来简化我们涉及两项服务的本地开发体验,但我正在努力以正确的方式使用主机端口和容器端口。情况如下:
backend
)frontend
)docker-compose up
为准。我遇到的问题是,在本地开发中,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'
答案 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