Cuando ejecuto docker-compose up
mi proyecto de Docker, falla con el siguiente mensaje:
Error starting userland proxy: listen tcp 0.0.0.0:3000: bind: address already in use
netstat -pna | grep 3000
muestra esto:
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN -
Ya lo intenté docker-compose down
, pero no ayuda.
ubuntu
docker
ubuntu-14.04
bind
docker-compose
Ngoral
fuente
fuente
sudo netstat -pna | grep 3000
para obtener el proceso que está escuchando.sudo
ver el nombre del proceso.sudo
podía cambiar la salida :)Respuestas:
En su caso, fue algún otro proceso que estaba usando el puerto y, como se indica en los comentarios, lo
sudo netstat -pna | grep 3000
ayudó a resolver el problema.Mientras que en otros casos (yo mismo lo encontré muchas veces), la mayoría de las veces es el mismo contenedor que se ejecuta en otra instancia. En ese caso,
docker ps
fue muy útil, ya que a menudo dejé los mismos contenedores ejecutándose en otros directorios y luego intenté ejecutarlos nuevamente en otros lugares, donde se usaban los mismos nombres de contenedor.Cómo
docker ps
me ayudó:docker rm -f $(docker ps -aq)
es un comando corto que utilizo para eliminar todos los contenedores.Editar: Se agregó cómo
docker ps
me ayudó.fuente
docker-compose down
ayudadocker-compose up
. Aunque recomiendo en mi respuesta encontrar el contenedor que ya se está ejecutando y tomar la acción deseada. Me sentí apropiado para eliminarlos, si alguien no quiere eliminarlos, entonces hayrm
usostop
para detenerlos.tensorflow/tensorflow
se ejecutará la imagen. ¿Cómo puedo configurar mi imagen para que se ejecute en otro puerto? He intentado esto:docker run -it -d -p 8888:8000 tensorflow/tensorflow
enlacé el puerto 8888 de mi imagen al 8000 en el cliente, pero no funciona.-d
opción. Ahora, los puertos se exponen comoHOST:CONTAINER
. Por lo tanto, debe correrdocker run -it -p 8000:8888
Esto me ayudó:
docker-compose down # Stop container on current dir if there is a docker-compose.yml docker rm -fv $(docker ps -aq) # Remove all containers sudo lsof -i -P -n | grep <port number> # List who's using the port
y luego:
kill -9 <process id>
(macOS) osudo kill <process id>
(Linux).Fuente: comentario del usuario Rub21 .
fuente
docker rm -fv $(docker ps -aq)
esta línea era todo lo que necesitaba. GraciasTuve el mismo problema,
docker-compose down --rmi all
(en el mismo directorio donde ejecuta docker-compose up)ayuda
fuente
down
es lo último que suele querer hacer. Perder el estado actual no es pan comido.Para Linux / Unix:
Búsqueda simple de la utilidad de Linux usando el siguiente comando
Mostrará el procesamiento ejecutándose en este puerto, luego matará ese proceso usando PID (busque un PID en la fila) de ese proceso.
fuente
Yo tuve el mismo problema. Arreglé esto deteniendo el servicio Apache2 en mi host.
fuente
En mi caso fue
Y todo lo que necesito es desactivar la escucha de depuración en php storm
fuente
En algunos casos, es fundamental realizar una depuración más profunda del problema antes de detener un contenedor o matar un proceso.
Considere seguir la siguiente lista de verificación:
1) Verifique su actual entorno de composición Docker
Run
docker-compose ps
.Si otro contenedor está usando el puerto, deténgalo
docker-compose stop <service-name-in-compose-file>
o retírelo reemplazándolostop
conrm
.2) Compruebe los contenedores que se ejecutan fuera de su espacio de trabajo actual
Ejecutar
docker ps
para ver la lista de todos los contenedores que se ejecutan en su host.Si encuentra que el puerto está siendo utilizado por otro contenedor, puede detenerlo con
docker stop <container-id>
.(*) Debido a que no está bajo el alcance del
compose
entorno de origen , es una buena práctica primero usar Docker Inspect para recopilar más información sobre el contenedor que está a punto de detener.3) Compruebe si otros procesos que se ejecutan en el host utilizan
el puerto. Por ejemplo, si el puerto es 6379, ejecute:
(*) También puede usar el comando lsof que se usa principalmente para recuperar información sobre archivos que son abiertos por varios procesos (sugiero ejecutar
netstat
antes de eso).Entonces, en el caso de la salida anterior,
PID
is915
. Ahora puedes ejecutar:Y vea el ID del proceso padre (
PPID
) y el comando de ejecución.También puede ejecutar:
$ pstree -s <PID>
a una visualización visual del proceso y sus procesos relacionados.En nuestro caso, podemos ver que el proceso probablemente sea un demonio (PPID es 1); en ese caso, considere ejecutar:
A)
$ cat /proc/<PID>/status
para obtener información más detallada sobre el proceso, como la cantidad de subprocesos generados por el proceso, sus capacidades, etc. '.B)
$ systemctl status <PID>
para ver elsystemdunidad que provocó la creación de un proceso específico. Si el servicio no es crítico, puede detenerlo y deshabilitarlo .4) Reiniciar servicio acoplable
Run:
sudo service docker restart
.5) Ha llegado a este punto y ...
Sólo si no pone en riesgo su sistema, considere reiniciar el servidor.
fuente
Actualicé mi ventana acoplable esta tarde y encontré el mismo problema. Intenté reiniciar Docker pero no tuve suerte.
Finalmente, tuve que reiniciar mi computadora y funcionó. Definitivamente un error.
fuente
Compruebe
docker-compose.yml
, podría darse el caso de que el puerto se especifique dos veces.fuente
Me encontré con el mismo problema varias veces. Reiniciar Docker parece hacer el truco
fuente
Resuelvo el problema reiniciando Docker.
fuente
y luego reinicia tu computadora
fuente
Una variación de la respuesta de @ DmitrySandalov: tenía tomcat / java ejecutándose en 8080, que necesitaba continuar. Miré el archivo docker-compose.yml y modifiqué la entrada de 8080 a otra de mi elección.
Funcionó perfectamente. (El único inconveniente es que el cambio se borrará si alguna vez actualizo el proyecto, ya que proviene de un repositorio externo).
fuente
Solo una nota al margen si tiene el mismo problema y está con Windows:
En mi caso el proceso a mi manera es justo
grafana-server.exe
. Porque primero descargué la versión binaria y hice doble clic en el ejecutable, y ahora comienza como un servicio por parte del usuarioSYSTEM
que no puedotaskkill
(sin permiso)Tengo que ir al "Administrador de servicios" de Windows, buscar el servicio "Grafana" y detenerlo. Después de eso, el puerto 3000 ya no está ocupado.
Espero que ayude.
fuente
El que estaba usando el puerto 8888 era Jupiter y tuve que cambiar el archivo de configuración del portátil Jupiter para que se ejecutara en otro puerto.
para enumerar quién está usando ese puerto específico. sudo lsof -i -P -n | grep 9
Puede especificar el puerto que desea que ejecute Jupyter sin comentar / editar la siguiente línea en ~ / .jupyter / jupyter_notebook_config.py:
c.NotebookApp.port = 9999
En caso de que no tenga un jupyter_notebook_config.py intente ejecutar jupyter notebook --generate-config. Consulte esto para obtener más detalles sobre la configuración de Jupyter.
fuente
Cambiar network_mode: "bridge" a "host" lo hizo por mí.
Esto con
fuente
Antes de que se ejecutara en: docker run -d --name oracle -p 1521: 1521 -p 5500: 5500 qa / oracle Acabo de cambiar el puerto a docker run -d --name oracle -p 1522: 1522 -p 5500: 5500 qa / oráculo
funcionó bien para mí!
fuente
En mi máquina, este comando no mostraba un PID
netstat -tulpn
para el puerto en uso (8080), por lo que no pude eliminarlo, eliminar los contenedores y reiniciar la computadora no funcionó. Entonces, elservice docker restart
comando reinició la ventana acoplable para mí (ubuntu) y el puerto ya no estaba en uso y soy un tipo feliz y me voy a almorzar.fuente
Recibí el siguiente error cuando intentaba iniciar un nuevo conatier: escuche tcp 0.0.0.0:8080: bind: address ya está en uso.
Solución: netstat -tulnp | grep 8080
[[email protected] (aws_main) ~] # netstat -tulnp | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* ESCUCHAR 12749 / java [[email protected] (aws_main) ~] #
matar -9 12749
Luego intente reiniciar el contenedor, debería funcionar
fuente
Hace el truco.
fuente