【问题标题】:Connection refused between 2 Docker Containers running on AWS EC2 Ubuntu instance在 AWS EC2 Ubuntu 实例上运行的 2 个 Docker 容器之间的连接被拒绝
【发布时间】: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.0localhost 都没有工作,所以我现在不知道该做什么。

在我的 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


【解决方案1】:

如果您是从本地计算机连接,请确保:

  • 您使用的不是 Docker 网络 DNS 名称 (node:3000),而是 EC2 实例的公共 IP
  • 您的实例的安全组应允许端口 3000 上的入站流量

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2020-09-03
    • 2017-05-09
    • 2021-12-18
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多