英文:
docker compose: network two react apps
问题
我正在尝试学习Docker Compose网络。我有两个React应用程序,分别在*/one和/two*上显示网页。在尝试将它们连接到网络之前,每个应用程序都可以使用Docker Compose分别运行而不出现问题,并使用Compose文件中的以下设置...
ports:
- 3001:3000
现在,我需要在同一个Docker网络上运行它们。因此,我创建了一个名为common-network的Docker网络,并将该网络引用添加到每个应用程序的Docker Compose文件中。我还将第二个应用程序的Compose文件更新为仅公开其容器端口EXPOSE 3000
(请参见底部的文件);否则,如果我保持两者的端口映射都是3001:3000,那么3001端口会出现主机端口冲突。
使用下面的文件,如果我对每个应用程序运行docker-compose up -d --build
,我确认我可以在任何容器中无问题地使用docker exec -it <container> ping <service>
来ping另一个服务。然而,一旦我在浏览器中导航到*/one*,如果我导航到*/two*,我会得到一个空白页面。
我是不是在错误的方向上?
我需要做什么才能成功地在它们之间导航?
第一个:
version: '3.7'
services:
page-one-dev:
container_name: page-one-dev
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- 3001:3000
environment:
- CHOKIDAR_USEPOLLING=true
- DOCKER_CLIENT_TIMEOUT=120
- COMPOSE_HTTP_TIMEOUT=120
networks:
default:
external:
name: common-network
第二个:
version: '3.7'
services:
page-two-dev:
container_name: page-two-dev
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
# ports:
# - 3001:3000
expose:
- 3000
environment:
- CHOKIDAR_USEPOLLING=true
- DOCKER_CLIENT_TIMEOUT=120
- COMPOSE_HTTP_TIMEOUT=120
networks:
default:
external:
name: common-network
英文:
I am trying to learn docker-compose networking. I have two react apps that each display a web page at /one and /two, respectively. Before trying to network them, each app ran separately without issue using docker-compose and using this setting in the compose files...
ports:
- 3001:3000
Now, I need to run them both on the same docker network. So, I created a docker network named common-network and added that network reference to the docker-compose file for each app. I also updated the second app compose file to only expose its container port EXPOSE 3000
(see file at bottom); otherwise if I kept the same port mapping of 3001:3000 for both then there was a host port conflict for 3001.
Using the files below, if I do a docker-compose up -d --build
for each app, I confirmed that I can ping the other service from either container without issue using docker exec -it <container> ping <service>
. However, once I navigate in a browser to /one, if I navigate to /two I get a blank page.
Am I going about this wrong?
What do I need to do to successfully navigate between them?
first:
version: '3.7'
services:
page-one-dev:
container_name: page-one-dev
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- 3001:3000
environment:
- CHOKIDAR_USEPOLLING=true
- DOCKER_CLIENT_TIMEOUT=120
- COMPOSE_HTTP_TIMEOUT=120
networks:
default:
external:
name: common-network
second:
version: '3.7'
services:
page-two-dev:
container_name: page-two-dev
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
# ports:
# - 3001:3000
expose:
- 3000
environment:
- CHOKIDAR_USEPOLLING=true
- DOCKER_CLIENT_TIMEOUT=120
- COMPOSE_HTTP_TIMEOUT=120
networks:
default:
external:
name: common-network
答案1
得分: 0
In this case, since you want both apps to be accessible on the same port and host, you need what's called a "reverse proxy".
The most common ones are nginx, caddy and, particularly interesting in a container environment, traefik.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论