Zen*_*nit 7 api docker reactjs
我有一个基于 PHP (lumen) 的 API 和一个基于 React 的电子商务。两者的工作都很好。当我尝试通过 Docker 使其工作时,问题就来了。我想部署仅运行一个命令的整个应用程序。
问题是反应应用程序没有与 API 连接。
我在这篇文章中尝试了@Suman Kharel 的回答
在运行 react 应用程序的 Docker 容器中代理 API 请求
但它不起作用。有谁知道我怎样才能解决它?
这是我在 bitbucket 上的 repo。
https://bitbucket.org/mariogarciait/ecommerce-submodule/src/master/
希望有人知道我做错了什么。
谢谢
JRi*_*dsz 13
使用 docker-compose 仅用于测试目的或非常有限的生产基础设施。最好的方法是将您的工件分别放在不同的主机中。
请阅读这些以了解一些要点:
当您使用 docker-compose 时,所有服务都部署在同一台机器上,但每个服务都在一个容器中。并且只有一个进程在容器内运行。
因此,如果您进入一个容器(例如 nodejs 中的 Web)并列出进程,您将看到如下内容:
nodejs .... 3001
Run Code Online (Sandbox Code Playgroud)
并进入另一个容器,如数据库 postgres:
postgres .... 5432
Run Code Online (Sandbox Code Playgroud)
因此,如果 nodejs web 需要连接到数据库,从内部,必须需要 ip 而不是postgress 数据库的localhost因为在 nodejs 容器内部,只有一个进程在 localhost 中运行:
localhost 3001
Run Code Online (Sandbox Code Playgroud)
因此,localhost:5432在 nodejs 容器内无法使用。解决方案是使用 postgres 的 ip 代替 localhost :10.10.100.101:5432
当我们有多个容器 (docker-compose) 并且它们之间存在依赖关系时,docker 建议我们:
总而言之,通过这些功能,docker 创建了一种“特殊网络”,您的所有容器都可以在其中安静地离开,而不会受到 ips 的影响!
在我看来,Docker 链接或网络是一种幻觉或欺骗,因为这仅适用于一台机器(开发或登台),隐藏了我们和其他复杂主题的依赖关系,当您的应用程序离开您的笔记本电脑并转到您的准备好供您的用户使用的真实服务器。
无论如何,如果您将 docker-compose 用于开发人员或实际目的,这些步骤将帮助您管理容器之间的 ip:
例子:
db:
image: mysql:5.7.22
container_name: db_ecommerce
ports:
- "5003:3306"
environment:
MYSQL_DATABASE: lumen
MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
api-php:
container_name: api_ecommerce
ports:
- "8020:80"
- "445:443"
environment:
- DATABASE_HOST=$MACHINE_HOST
- DATABASE_USER=$DATABASE_USER
- DATABASE_PASSWORD=$DATABASE_PASSWORD
- ETC=$ETC
web-react:
container_name: react_ecommerce
ports:
- 3001:3000
environment:
- API_BASE_URL=$MACHINE_HOST:8020/api
Run Code Online (Sandbox Code Playgroud)
docker-compose up -d同样在您的反应应用程序中,使用 package.json 中的 var 代替代理读取您的 api 的 url:
process.env.REACT_APP_API_BASE_URL
Run Code Online (Sandbox Code Playgroud)
检查此以了解如何从 react 应用程序读取环境变量。
在这里您可以找到有关如何使用MACHINE_HOST变量及其使用的更详细步骤:
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |