【发布时间】:2020-12-07 08:19:21
【问题描述】:
最近我正在使用 MERN 堆栈应用程序。然后我有一个 docker-compose.yml 看起来像这样:
version: "3"
services:
web:
build: ./concept.io-frontend
ports:
- "80:80"
depends_on:
- api
networks:
- network.concept.io
container_name: concept.io
api:
build: ./concept.io-backend
restart: always
ports:
- "5328:5328"
depends_on:
- db
networks:
- network.concept.io
container_name: api.concept.io
db:
image: mongo
restart: always
networks:
- network.concept.io
container_name: db.concept.io
networks:
network.concept.io:
driver: bridge
所以在后端(Express)代码中,我写道:
const URL = "mongodb://db.concept.io:27017/conceptio";
module.exports = {
url: URL,
};
当我声明 API 容器依赖于 Mongo 容器时,API 容器与 Mongo 完美连接。
但是说到前端容器,我已经复现了相同的设置,哪个前端容器依赖于API容器,并将“localhost”替换为API和Mongo的容器名称。
// const URL = "http://localhost:5328/";
const URL = "http://api.concept.io:5328/";
export const API_URL = URL + "api/";
export const AUTH_URL = API_URL + "auth/";
但我无法向该端点发出请求。
向同一个 Docker 容器网络中的另一个容器发出 HTTP 请求是否有任何错误或想法?
这里是 Dockerfile:
API:
FROM node:lts-alpine3.12 as builder
RUN apk add yarn
WORKDIR /opt/app
COPY package.json yarn.lock ./
RUN yarn install
COPY . ./
EXPOSE 5328
CMD ["yarn", "start"]
前端:
FROM node:lts-alpine3.12 AS builder
RUN apk add yarn
WORKDIR /opt/web
COPY package.json yarn.lock ./
RUN yarn install
ENV PATH="./node_modules/.bin:$PATH"
COPY . ./
RUN yarn run build
FROM nginx:1.19.1-alpine
RUN apk add curl
RUN curl -L https://github.com/a8m/envsubst/releases/download/v1.2.0/envsubst-`uname -s`-`uname -m` -o envsubst && \
chmod +x envsubst && \
mv envsubst /usr/local/bin
COPY ./nginx.config /etc/nginx/nginx.template
EXPOSE 80
CMD ["/bin/sh", "-c", "envsubst < /etc/nginx/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]
COPY --from=builder /opt/web/dist /usr/share/nginx/html
【问题讨论】:
-
前端代码是在容器内运行,还是提供浏览器应用程序并且浏览器最终调用您显示的 URL?浏览器不在 Docker 网络中运行,也不能使用 Docker 私有主机名。
-
@DavidMaze 刚刚得到它。浏览器无法翻译 Docker 主机名,所以我只能使用 localhost 或修改主机文件以创建一个假域。谢谢:D
标签: node.js reactjs docker express docker-compose