Jus*_*i A 5 websocket node.js typescript docker
我有一个在 Docker 上运行的简单 TypeScript 程序,该程序想要打开与外部 Websocket 服务器的 Websocket 连接。像这样的东西
----------------------- ------------------------------
| My Local Docker | | my.ws-server.somewhere.com |
| | | |
| WS client |---> Internet----->| WS server |
----------------------- ------------------------------
Run Code Online (Sandbox Code Playgroud)
当我ts-node test.js在 Docker 之外的开发环境中使用 WS 客户端运行 ( ) 代码时,它工作正常并且可以毫无问题地连接:
let ws = new WebSocket("ws://my.ws-server.somewhere.com", [], { })
ws.onopen = () => {
console.log('Connection opened ok! ')
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将这个东西放入 Docker 并在那里运行时,连接被拒绝。程序按其应有的方式开始连接尝试,但只是超时,并且连接从未打开。我猜这与 Docker 网络有关?如果我想打开一个从Docker到外界的出站连接,我需要定义一些路由什么的吗?
我的 Docker 设置
Dockerfile
FROM node:12.18.3
RUN mkdir /src
WORKDIR /src
ADD ./package.json /src/package.json
RUN npm install
EXPOSE 3000
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: "3.4"
services:
my-service:
container_name: my-service
restart: always
build:
context: .
dockerfile: my-service.dockerfile
volumes:
- ".:/src"
Run Code Online (Sandbox Code Playgroud)
(我注意到我可以通过添加network_mode: "host"到 docker compose 来完成这项工作,但这并不是我真正想要做的,这样我就可以保留正常的入站端口映射)
小智 0
首先,您应该检查您的 websocket 是否在良好的端口上打开,我看到您公开了端口 3000。此外,您还必须检查您的代理是否已为该端口设置良好。您也可能需要安全的 Websocket 连接才能使其正常工作(然后 url 变为 wss://mywebsocket.something.com)。
可以的话给我反馈
| 归档时间: |
|
| 查看次数: |
4060 次 |
| 最近记录: |