J'ai un programme TypeScript simple qui tourne sur Docker, et ce programme aimerait ouvrir une connexion Websocket avec un serveur Websocket externe. Quelque chose comme ceci
----------------------- ------------------------------
| My Local Docker | | my.ws-server.somewhere.com |
| | | |
| WS client |---> Internet----->| WS server |
----------------------- ------------------------------
Lorsque je lance ( ts-node test.js
) le code avec le client WS sur mon environnement de développement en dehors de Docker, il fonctionne bien et peut se connecter sans problème :
let ws = new WebSocket("ws://my.ws-server.somewhere.com", [], { })
ws.onopen = () => {
console.log('Connection opened ok! ')
}
Cependant, lorsque je place cette chose dans Docker et que je l'exécute, la connexion est refusée. Le programme démarre la tentative de connexion comme il se doit, mais il y a juste un timeout et la connexion n'est jamais ouverte. Je suppose que cela a quelque chose à voir avec le réseau Docker ? Si je veux ouvrir une connexion sortante de Docker vers le monde extérieur, dois-je définir des routes ou quelque chose comme ça ?
Ma configuration Docker
Fichier Docker
FROM node:12.18.3
RUN mkdir /src
WORKDIR /src
ADD ./package.json /src/package.json
RUN npm install
EXPOSE 3000
docker-compose.yml
version: "3.4"
services:
my-service:
container_name: my-service
restart: always
build:
context: .
dockerfile: my-service.dockerfile
volumes:
- ".:/src"
(J'ai remarqué que je pouvais faire fonctionner ce système en ajoutant network_mode: "host"
à docker compose, mais ce n'est pas ce que je voudrais vraiment faire pour pouvoir conserver les mappages de ports entrants normaux)