【问题标题】:Docker connect NodeJS container with Apache container in front end JSDocker 将 NodeJS 容器与前端 JS 中的 Apache 容器连接起来
【发布时间】:2018-03-11 05:16:23
【问题描述】:

我正在构建一个我在 Docker 中实现的聊天应用程序。我有一个带有 socket.io 的 NodeJS 容器和一个带有 apache 服务器和网站的容器。

问题是我需要将网站(使用 javascript)连接到 NodeJS 服务器。我查看了 Docker-compose docks 并阅读了有关网络的信息。文档说地址应该是容器的名称。但是当我尝试在浏览器控制台中收到以下错误时:

GET http://nodejs:3000/socket.io/socket.io.js net::ERR_NAME_NOT_RESOLVED

整个项目在容器之外工作。我唯一想不通的是 NodeJs 容器和 Apache 容器之间的连接。

引发错误的代码:

<script type="text/javascript" src="//nodejs:3000/socket.io/socket.io.js"></script>

我的 docker 撰写文件:

version: '3.5'

services:

  apache:
    build:
      context: ./
      dockerfile: ./Dockerfile
    networks:
      default:
    ports:
      - 8080:80
    volumes:
      - ./:/var/www/html
    container_name: apache

  nodejs:
    image: node:latest
    working_dir: /home/node/app
    networks:
      default:
    ports:
      - '3001:3000'
    volumes:
      - './node_server/:/home/node/app'
    command: [npm, start]
    depends_on:
      - mongodb
    container_name: nodejs

networks:
  default:
    driver: bridge

谁能解释我如何成功地将 apache 容器连接到 NodeJS 容器,以便它可以为 socket.io.js 文件提供服务?
如果需要,我可以提供更多源代码。

【问题讨论】:

    标签: node.js docker socket.io docker-compose


    【解决方案1】:

    nodejs 服务正在公开端口 3001 而不是 3000。3001:3000 是一个端口映射,它将 :3001 转发到 :3000 容器端口。所以你需要把它指向nodejs:3001

    但是,我认为这不会起作用,因为浏览器无法访问 nodejs 主机名。您需要将其指向运行 docker 的主机,因为您要在那里公开这些端口。如果您在本地运行它,它可能看起来像:

    <script type="text/javascript" src="//localhost:3001/socket.io/socket.io.js"></script>
    

    换句话说,您不是从 apache 服务连接到 nodejs 服务器,而是通过浏览器从外部访问它。

    【讨论】:

    • 非常感谢您。 In other words, you are not connecting to the nodejs server from the apache service, you are accessing it externally through the browser.是我忽略的。
    猜你喜欢
    • 2019-04-24
    • 2020-03-08
    • 2023-01-14
    • 1970-01-01
    • 2021-11-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多