繁体   English   中英

Docker将NodeJS容器与前端JS中的Apache容器连接

[英]Docker connect NodeJS container with Apache container in front end JS

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

事情是我需要连接到网站(使用javascript)到NodeJS服务器。 我查看了Docker组成的码头,并了解了网络。 文档说地址应该是容器的名称。 但是当我尝试这样做时,我在浏览器控制台中收到以下错误:

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>

我的泊坞窗撰写文件:

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文件提供服务?
如果需要,我可以提供更多的源代码。

nodejs服务公开的端口不是3001,而不是nodejs 3001:3000是端口映射,它将:3001转发到:3000容器端口。 因此,您需要将其指向nodejs:3001

但是,我认为这不会起作用,因为浏览器无法访问nodejs主机名。 您需要将其指向运行docker的主机,因为您要在其中公开这些端口。 如果您在本地运行此程序,则可能类似于:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM