How to fix docker driver failed programming external connectivity on endpoint webserver?
This blog post will address how to fix the docker issue EADDRINUSE (PORT or ADDRESS already in use). Here is a little error snapshot which I have taken from my docker container which I was aiming to run on port 1313 but unfortunately the port is already occupied by some other process.
1docker: Error response from daemon: driver failed programming external connectivity on endpoint
2webserver (kdudfuyfndekdur6h8e3b271db180ffbee0a56caeskdhfudeu363fbc02ea805101df21e): Error starting
3springboot proxy: Bind for 0.0.0.0:1313: unexpected error (Failure EADDRINUSE).
Root Cause - The exact root cause of this docker error is the PORT conflict. There could be two reasons behind this issue -
- Either there is some background process that is already occupying the PORT 1313
- You are trying to start one more docker container using the same PORT 1313
How to fix - docker driver failed programming external connectivity on endpoint web server?
- Start the container on different port
- Find and kill the process already running on same port
- Reset docker network by removing network files located at /var/lib/docker/network/files/local-kv.db
- Restart Docker service
- Conclusion
1. Start the container on a different port
The first obvious solution would be to start your new docker image on another port. So if you have a possibility to start your docker container on another port then go for it.
I had this issue on my port 1313
Here is an example of how to start the container on another port e.g. 1414 -
1docker run -p 1414:1414 -t rahulwagh17/jhooq-docker-demo:jhooq-docker-demo
Here is my dockerfile -
1FROM openjdk:8-jdk-alpine
2ARG JAR_FILE=build/libs/*.jar
3COPY ${JAR_FILE} app.jar
4ENTRYPOINT ["java","-jar","/app.jar"]
If you are using the docker-compose.yaml then you need to make port change into your docker-compose.yaml -
Here is my docker-compose.yaml with port 1414 -
1version: '3'
2
3services:
4 jhooq-springboot-container:
5 image: jhooq-spring-boot-docker-compose:1
6 build:
7 context: ./
8 dockerfile: Dockerfile
9 volumes:
10 - /data/jhooq-springboot-container
11 ports:
12 - "1414:1414"
Using the above approach you can avoid the port conflict and fix the docker driver failed programming external connectivity on endpoint web server issue.
2. Find and kill the process already running on the same port
The second approach would be to find another process that is already occupying the PORT 1313 and kill the process.
(*Note - Be careful when you kill the other process because you might stop some critical process in your system or production environment. So always check it through before killing any process.)
2.1 Use the following command to find the process running on port 1313
1lsof -i :1313
2.2 Kill the process running on PID
Now you know the process by PID which is running on port 1313.
Use the following bash command to kill the process by PID -
1kill -9 2944
3. Reset docker network by removing network files located at /var/lib/docker/network/files/local-kv.db
If the previous two steps(Step-1,Step-2) does not help you to fix the issue then I would recommend you to reset the docker network setting
The possible reason could be that docker has failed to reset the network setting causing the docker driver to fail programming external connectivity on endpoint webserver
To fix this you need to delete the local-kv.db file. To delete the file you can use the following command -
1rm /var/lib/docker/network/files/local-kv.db
In case if you get permission denied issue then use sudo.
4. Restart Docker service
If the previous steps(Step-1,Step-2,Step-3) does not help you much in troubleshooting your issue and you did not find any possible reason then restarting docker service would be a better option.
Use the following command to restart the docker service -
1sudo service docker restart
5. Conclusion
The majority of the errors which occur due to PORT conflict (EADDRINUSE) can be resolved by searching the process which has already occupied the PORT.
Also do not rush to kill the process which is already occupying your desired port because it may result in unforeseen issues in a production environment.
Posts in this Series
- How to set-up Cron Jobs in Docker Containers?
- 4 Ways to copy file from localhost to docker container
- Multiple commands execution in Docker Compose?
- How to push Docker Images to AWS ECR(Elastic Container registry)?
- How to Copy Docker images from one host to another host?
- What is persistent storage in docker and how to manage it
- Docker Installation on MacOS, Linux and Windows
- Docker - ADD, Update, Export Environment variable
- How to fix-Docker docker failed to compute cache key not found
- How to fix docker driver failed programming external connectivity on endpoint webserver?
- How to fix docker error executable file not found in $PATH?
- How to expose port on live containers?
- How to expose multiple ports with Docker?
- How to restart single docker container within multiple docker container?
- How to edit file within Docker container or edit a file after I shell into a Docker container?
- How to fix Error starting docker service Unit not found?
- How to remove old, unused images of Docker?
- How to fix docker error invalid reference format error?
- How to fix requested access to the resource is denied?
- How to fix Docker error cannot delete docker container conflict unable to remove repository reference?
- How to fix docker error no space left on device?
- How to connect localhost from docker container?
- Docker COPY vs Docker ADD?
- 6 Ways to fix - Got permission denied while trying to connect to the Docker daemon socket?
- 6 Ways to fix – Docker COPY failed: stat no source files were specified