docker 建筑中的 reactjs
reactjs in docker building react
我在 docker 中的构建步骤中构建我的 reactjs 应用程序时遇到问题,然后使用 nginx 运行 它。但是我无法让它能够连接到我的 api 运行ning 在另一个容器
我的docker-cmpose.yml的相关部分在这里
api:
build:
dockerfile: Dockerfile
context: "./api"
depends_on:
- mysql_db
volumes:
- /app/node_modules
- ./api:/app
environment:
<<: *common-variables
MYSQL_HOST_IP: mysql_db
networks:
- my-network
frontend:
depends_on:
- api
stdin_open: true
environment:
API_URL: http://api:3030/v1
build:
dockerfile: Dockerfile
context: ./frontend
ports:
- "8090:80"
volumes:
- /app/node_modules
- ./frontend:/app
networks:
- my-network
networks:
my-network:
name: my-network
我的 Dockerfile 中的相关位是
COPY package.json ./
COPY ./ ./
RUN npm i && npm run build
# production environment
FROM nginx:stable-alpine
WORKDIR /app
COPY --from=build /app/build /usr/share/nginx/html
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
最后在我的 default.conf for ngnx
upstream api {
server api:3030;
}
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html index.htm index.nginx-debian.html;
server_name xxxx.com www.xxxx.com
location / {
try_files $uri $uri/ =404;
}
location /api {
rewrite /api/(.*) / break;
proxy_pass http://api;
}
}
我遇到的问题是无法解决 api
谁能帮我解决容器中 api 运行ning 的 ip/url 问题?
提前致谢
React 应用程序在浏览器中运行,它不能使用任何 Docker 网络功能。特别是,由于它在浏览器中运行,因此无法解析 api
主机名,该主机名仅存在于同一 Compose 网络上的容器 运行 中,而您的浏览器不在容器中。
您已经将 Nginx 设置为代理 /api
到后端应用程序,我将使用该路径。您可能可以设置类似 API_URL: /api/v1
的内容而没有主机部分。您的浏览器会将其解释为仅相对路径 URL 并使用应用程序所在的主机和端口 运行。
我在 docker 中的构建步骤中构建我的 reactjs 应用程序时遇到问题,然后使用 nginx 运行 它。但是我无法让它能够连接到我的 api 运行ning 在另一个容器
我的docker-cmpose.yml的相关部分在这里
api:
build:
dockerfile: Dockerfile
context: "./api"
depends_on:
- mysql_db
volumes:
- /app/node_modules
- ./api:/app
environment:
<<: *common-variables
MYSQL_HOST_IP: mysql_db
networks:
- my-network
frontend:
depends_on:
- api
stdin_open: true
environment:
API_URL: http://api:3030/v1
build:
dockerfile: Dockerfile
context: ./frontend
ports:
- "8090:80"
volumes:
- /app/node_modules
- ./frontend:/app
networks:
- my-network
networks:
my-network:
name: my-network
我的 Dockerfile 中的相关位是
COPY package.json ./
COPY ./ ./
RUN npm i && npm run build
# production environment
FROM nginx:stable-alpine
WORKDIR /app
COPY --from=build /app/build /usr/share/nginx/html
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
最后在我的 default.conf for ngnx
upstream api {
server api:3030;
}
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html index.htm index.nginx-debian.html;
server_name xxxx.com www.xxxx.com
location / {
try_files $uri $uri/ =404;
}
location /api {
rewrite /api/(.*) / break;
proxy_pass http://api;
}
}
我遇到的问题是无法解决 api
谁能帮我解决容器中 api 运行ning 的 ip/url 问题?
提前致谢
React 应用程序在浏览器中运行,它不能使用任何 Docker 网络功能。特别是,由于它在浏览器中运行,因此无法解析 api
主机名,该主机名仅存在于同一 Compose 网络上的容器 运行 中,而您的浏览器不在容器中。
您已经将 Nginx 设置为代理 /api
到后端应用程序,我将使用该路径。您可能可以设置类似 API_URL: /api/v1
的内容而没有主机部分。您的浏览器会将其解释为仅相对路径 URL 并使用应用程序所在的主机和端口 运行。