【发布时间】:2020-03-27 00:49:15
【问题描述】:
我已将我的项目从 GitHub 克隆到我的 AWS Ubuntu EC2 实例,并尝试使用 Docker 容器部署/托管它。我的应用程序的前端是一个 Angular 项目,我已经构建到 dist 文件夹,我打算使用 Nginx 来查看它。
我的应用程序的后端是一个运行 Express 的 Node 服务器。我遇到的问题似乎与我的 Docker 配置有关。
当我运行 docker-compose up --build -d 时,我访问了我的 ec2 IP 地址并且应用程序在那里并且我可以与之交互但是当我尝试从节点加载资源时后端我在浏览器中收到连接被拒绝并显示 Http 错误响应,如下所示。
以下是我的 docker 配置文件:
docker-compose.yml
version: '3'
services:
web:
build: ./Crypto-Trader
ports:
- "80:80"
depends_on:
- node
networks:
- local
node:
build: ./Server/Node
ports:
- "3000:3000"
networks:
- local
networks:
local:
driver: bridge
用于前端配置的 Dockerfile
FROM nginx
COPY ./dist/Crypto-Trader /usr/share/nginx/html
EXPOSE 80
节点后端的 Dockerfile
FROM node
WORKDIR /src
COPY . /src
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
我还应该在我的 Angular 项目中提到,我有一个用于设置 url 连接字符串的环境变量,如下所示
export const environment = {
production: true,
dockerIP: 'node'
};
So in my Angular services the connection string to the backend would look something like:
http://${dockerIP}:3000/someresource
我尝试了几种不同的方式来连接后端,将 dockerIP 更改为:
0.0.0.0 或 localhost 都没有工作,所以我现在不知道该做什么。
在我的 ec2 实例中,我单独运行了 Node 容器,并且能够通过在命令行上运行此 curl 命令来访问数据:
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://0.0.0.0:3000/profiles/products-list
但每当我同时运行这两个容器时,它们之间似乎会出现通信错误。
所以我希望我已经为某人提供了足够的信息来帮助我,我不确定我还能尝试什么来让这 2 个容器进行通信。提前感谢任何回复的人。
【问题讨论】:
-
您的本地浏览器是否给您“node:3000”地址的“未解决”错误?如果是这样的话——这是意料之中的。 node:3000 地址只能被 docker 网络中的容器访问。您可以尝试使用 my-ec2-instance-public-ip:3000 来访问您的后端。
-
是的,那是我的本地浏览器。好的,是的,我明白你的意思,这只是我在提问之前的最后一次尝试。嗯,现在我已经将我的后端作为一个单独的容器运行,我正在尝试使用 Postman 访问它,我已经尝试了 ec2 公共 DNS (IPv4) 和 IPv4 公共 IP,但仍然没有连接。
-
那么您的安全组是否允许连接到端口 3000?
-
不,我现在没有它,它正在工作。非常感谢安东。
-
不客气!我把这些 cmets 变成了答案。请考虑接受。
标签: angularjs docker nginx amazon-ec2 docker-compose