He estado tratando de mover un servidor socketio de EC2 a Docker.
He podido conectarme al zócalo a través de un cliente web (http), pero parece imposible conectarse directamente al zócalo a través de iOS o Android.
Leí que uno de los problemas puede ser que los puertos expuestos no se publiquen realmente cuando se usa Docker. Dado que nuestras aplicaciones móviles actualmente se conectan en el puerto 8080 en nuestra instancia EC2 clásica. Configuré un archivo docker-compose.yml para intentar abrir todos los puertos y protocolos de comunicación, pero tengo dos problemas:
1. No estoy seguro de cómo se debe llamar el servicio, así que elegí "src" (ver DockerFile a continuación). ¿Pero se pregunta si debería ser una aplicación ya que el archivo del servidor es app.js?
2. Obtener "Enlace para 0.0.0.0:8080 falló: el puerto ya está asignado".
DockerFile
FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive RUN mkdir /src ADD package.json /src RUN apt-get update RUN apt-get install --yes curl RUN curl --silent --location https://deb.nodesource.com/setup_4.x | sudo bash - RUN apt-get install --yes nodejs RUN apt-get install --yes build-essential RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10 RUN cd /src; npm install RUN npm install --silent socket.io@0.9.14 WORKDIR /src # Bundle app source # Trouble with COPY http://stackoverflow.com/a/30405787/2926832 COPY . /src ADD app.js /src/ EXPOSE 8080 CMD ["node", "/src/app.js"]Docker-Compose.yml
src: build: . volumes: - ./:/src expose: - 8080 ports: - "8080" - "8080:8080/udp" - "8080:8080/tcp" - "0.0.0.0:8080:8080" - "0.0.0.0:8080:8080/tcp" - "0.0.0.0:8080:8080/udp" environment: - NODE_ENV=development - PORT=8080 command: sh -c 'npm i && node server.js' echo 'ready'
- Obtener "Enlace para 0.0.0.0:8080 falló: el puerto ya está asignado".
tiene asignaciones de puertos duplicadas.
cuando no se especifica un tipo de conexión, el puerto predeterminado es tcp : lo que significa "0.0.0.0:8080:8080" y "0.0.0.0:8080:8080/tcp" ambos tratando de vincularse al mismo puerto y de ahí su error.
dado que la ventana acoplable usa 0.0.0.0 para el enlace predeterminado , lo mismo se aplica a "8080:8080/tcp" y "0.0.0.0:8080:8080/tcp" : 8080: 8080/tcp": no necesita ninguno de los dos.
por lo tanto, puede reducir su sección de ports a:
ports: - "8080:8080" - "8080:8080/udp"No estoy seguro de cómo debería llamarse el servicio.
Depende completamente de ti. por lo general, los servicios reciben el nombre de su contenido o función en la red, como nginx_proxy laravel_backend etc., por lo que node_app me parece bien, la app también está bien en redes pequeñas, src no parece tener ningún significado, pero de nuevo, es solo un identificador por su servicio, sin ningún efecto adicional.
Simplemente está ejecutando otro contenedor en el mismo puerto. Puede verlo con docker ps y detenerlo con docker stop [CONTAINER ID] .
solo necesita abrir el archivo docker.yml y cambiar su dirección de puerto... esto me sucede porque mi compañía ya usó ese contenedor, otro miembro
ejemplo de 0.0.0.0:80==>0.0.0.0:8000 y también puerto de puertos:- 80/80 a puertos:- 8000:8000