Here is the problem, I want to deploy an API in my server but the server runs other services that conflict with the default IP that was given by default for docker0
interface. So I need to set up a custom subnet IP for that interface and put up some docker containers without creating new interfaces with the same subnet that is conflicting with the aforementioned services.
Docker Service Config
First, we need to set the custom subnet for the docker0
default interface. To do this we need to edit or create if it does not exist a configuration file for the docker service.
# vim /etc/docker/daemon.json
And put this as content:
{
"bip": "10.10.0.1/24"
}
After that we need to restart the docker service:
# service docker restart
After restart the docker service we can run ifconfig
to see if the changes were applied:
As we can see in the image, the docker0
interface is set with the subnet that we have inserted in the daemon.json
file.
Docker Compose
Now we have to set in our docker-compose.yml
file, that we want to use the docker0
interface and not create some random new one. To do this you only need to add network_mode: bridge
option to all your services inside docker-compose.yml
file, like:
version: '3.3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'Lorem-Diem'
MYSQL_USER: 'lorem'
MYSQL_PASSWORD: 'Lorem-Ipsum'
network_mode: bridge
ports:
- '3306:3306'
volumes:
- ./mysql_data:/var/lib/mysql
And after that you can just build and put up your containers:
$ docker-compose up -d --build
Now, if you run ifconfig
again you will see that none new interfaces were created.
If you want to see your container IP, get the container id using $ docker ps
and run $ docker inspect <your container id> | grep -i ip
.
Single Docker
If you want to start a single docker using the docker0
interface, you can add the --net bridge
to your docker run
command, like:
$ docker run -it -d --net bridge ubuntu:18.04 /bin/bash
The above command brings up a detached container running Ubuntu version 18.04 and calls the /bin/bash
so that you can run ifconfig
again in your host machine to see that the container is really using the default docker0
interface.
All the containers mentioned in this post will receive an IP address that fits the docker0
subnet.
Top comments (0)