[英]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.