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