簡體   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