我有一个带有2个容器的docker设置,一个用于服务器的nginx和一些应用程序,在该应用程序的端口6001上,我正在运行一个socket.io服务器,还为nginx定义了一个虚拟主机。
如何从浏览器访问端口6001上的应用程序?
我尝试在两个容器上暴露端口6001,但未成功。 我也尝试为应用程序定义虚拟主机,也没有成功
Socket.io服务器:
function handler(request, response) {
response.writeHead(200);
response.end('');
}
try {
let app = require('http').createServer(handler);
app.listen(process.env.SOCKET_PORT, function () {
if (process.env.APP_DEBUG) {
console.log(new Date, 'Server is running on port ' + process.env.SOCKET_PORT);
}
});
try {
let io = require('socket.io').listen(app, {log: false, origins: '*:*'});
io.on('connection', function (socket) {
if (process.env.APP_DEBUG) {
console.log(new Date, 'Connected to Socket', socket.id);
}
});
....
Docker-compose文件:
services:
app:
container_name: seatbelt_node
command: /bin/sh entrypoint.sh
build:
context: ./
dockerfile: docker/node.docker
volumes:
- ./:/var/www
- /var/www/node_modules
ports:
- "6001"
networks:
- seatbelt
web:
container_name: seatbelt_react
build:
context: ./
dockerfile: docker/web.docker
volumes:
- ./:/var/www
ports:
- "80"
links:
- app
environment:
- "VIRTUAL_HOST=dock.seatbelt.local"
networks:
- nginx-proxy
- seatbelt
连接到应用程序的功能:
let io = require('socket.io-client');
let host = window.location.host.split(':')[0];
let socket = io.connect('//' + host + ':' + process.env.SOCKET_PORT, {
secure: false,
rejectUnauthorized: false
});
socket.on('connect', function () {
console.log(new Date, 'Connected to socket.');
....
我尝试完成的操作是通过某种方式从浏览器以某种方式访问到的脚本,该脚本位于ock.seatbelt.local(seatbelt_web容器)上 在端口6001上的seatbelt_node容器