# echo PING | nc dtredis86 6379
nc: bad address 'dtredis86'
# echo PING | nc dtredis86 6379
nc: bad address 'dtredis86'
# echo PING | nc dtredis86 6379
nc: bad address 'dtredis86'
$ -weight: 500;">docker network ls
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
d4e5f6a1b2c3 host host local
e5f6a1b2c3d4 none null local
$ -weight: 500;">docker network ls
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
d4e5f6a1b2c3 host host local
e5f6a1b2c3d4 none null local
$ -weight: 500;">docker network ls
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
d4e5f6a1b2c3 host host local
e5f6a1b2c3d4 none null local
$ -weight: 500;">docker run -d --rm --name dtredis86 \ -v redisdata:/data \ -v ./redis.conf:/etc/redis/redis.conf \ redis:8.6 redis-server /etc/redis/redis.conf $ -weight: 500;">docker run -d --rm --name redisinsight \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker run -d --rm --name dtredis86 \ -v redisdata:/data \ -v ./redis.conf:/etc/redis/redis.conf \ redis:8.6 redis-server /etc/redis/redis.conf $ -weight: 500;">docker run -d --rm --name redisinsight \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker run -d --rm --name dtredis86 \ -v redisdata:/data \ -v ./redis.conf:/etc/redis/redis.conf \ redis:8.6 redis-server /etc/redis/redis.conf $ -weight: 500;">docker run -d --rm --name redisinsight \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker exec redisinsight sh -c "echo PING | nc dtredis86 6379"
nc: bad address 'dtredis86'
$ -weight: 500;">docker exec redisinsight sh -c "echo PING | nc dtredis86 6379"
nc: bad address 'dtredis86'
$ -weight: 500;">docker exec redisinsight sh -c "echo PING | nc dtredis86 6379"
nc: bad address 'dtredis86'
$ -weight: 500;">docker -weight: 500;">stop redisinsight $ -weight: 500;">docker run -d --rm --name redisinsight \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker -weight: 500;">stop redisinsight $ -weight: 500;">docker run -d --rm --name redisinsight \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker -weight: 500;">stop redisinsight $ -weight: 500;">docker run -d --rm --name redisinsight \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 600;">sudo chown -R 1001000:1001000 ./data/ri
$ -weight: 600;">sudo chown -R 1001000:1001000 ./data/ri
$ -weight: 600;">sudo chown -R 1001000:1001000 ./data/ri
$ -weight: 500;">docker run -d --rm --name dtredis2 -p 6380:6379 redis
$ -weight: 500;">docker run -d --rm --name dtredis2 -p 6380:6379 redis
$ -weight: 500;">docker run -d --rm --name dtredis2 -p 6380:6379 redis
$ hostname -I
<your_host_ip>
$ hostname -I
<your_host_ip>
$ hostname -I
<your_host_ip>
$ -weight: 500;">docker port dtredis2
6379/tcp -> 0.0.0.0:6380
$ -weight: 500;">docker port dtredis2
6379/tcp -> 0.0.0.0:6380
$ -weight: 500;">docker -weight: 500;">stop dtredis86 redisinsight
$ -weight: 500;">docker -weight: 500;">stop dtredis86 redisinsight
$ -weight: 500;">docker -weight: 500;">stop dtredis86 redisinsight
$ -weight: 500;">docker network create dtapp
$ -weight: 500;">docker network create dtapp
$ -weight: 500;">docker network create dtapp
$ -weight: 500;">docker run -d --rm --name dtredis --network dtapp redis
$ -weight: 500;">docker run -d --rm --name ri --network dtapp \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker run -d --rm --name dtredis --network dtapp redis
$ -weight: 500;">docker run -d --rm --name ri --network dtapp \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker run -d --rm --name dtredis --network dtapp redis
$ -weight: 500;">docker run -d --rm --name ri --network dtapp \ -p 8080:5540 \ -v ./data/ri:/data \ -e RI_PRE_SETUP_DATABASES_PATH=/data/config.json \ -e RI_ACCEPT_TERMS_AND_CONDITIONS=true \ redis/redisinsight
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis 6379"
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis 6379"
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis 6379"
$ -weight: 500;">docker run -d --rm --name dtredis2 redis
$ -weight: 500;">docker run -d --rm --name dtredis2 redis
$ -weight: 500;">docker run -d --rm --name dtredis2 redis
$ -weight: 500;">docker network connect dtapp dtredis2
$ -weight: 500;">docker network connect dtapp dtredis2
$ -weight: 500;">docker network connect dtapp dtredis2
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis2 6379"
PING
+PONG
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis2 6379"
PING
+PONG
$ -weight: 500;">docker exec ri sh -c "echo PING | nc dtredis2 6379"
PING
+PONG
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg \ --network dtstack \ -e POSTGRES_PASSWORD=-weight: 500;">docker \ -e POSTGRES_DB=testdb \ -v pgdata:/var/lib/postgresql/data \ --tmpfs /var/run/postgresql \ postgres:17
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg \ --network dtstack \ -e POSTGRES_PASSWORD=-weight: 500;">docker \ -e POSTGRES_DB=testdb \ -v pgdata:/var/lib/postgresql/data \ --tmpfs /var/run/postgresql \ postgres:17
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg \ --network dtstack \ -e POSTGRES_PASSWORD=-weight: 500;">docker \ -e POSTGRES_DB=testdb \ -v pgdata:/var/lib/postgresql/data \ --tmpfs /var/run/postgresql \ postgres:17
$ -weight: 500;">docker run -d --rm --name cloudbeaver \ --network dtstack \ -p 8978:8978 \ -v cbdata:/opt/cloudbeaver/workspace \ dbeaver/cloudbeaver:latest
$ -weight: 500;">docker run -d --rm --name cloudbeaver \ --network dtstack \ -p 8978:8978 \ -v cbdata:/opt/cloudbeaver/workspace \ dbeaver/cloudbeaver:latest
$ -weight: 500;">docker run -d --rm --name cloudbeaver \ --network dtstack \ -p 8978:8978 \ -v cbdata:/opt/cloudbeaver/workspace \ dbeaver/cloudbeaver:latest
$ -weight: 500;">docker network inspect dtstack
$ -weight: 500;">docker network inspect dtstack
$ -weight: 500;">docker network inspect dtstack
"Containers": { "abc123...": { "Name": "dtpg", "IPv4Address": "172.18.0.2/16" }, "def456...": { "Name": "cloudbeaver", "IPv4Address": "172.18.0.3/16" }
}
"Containers": { "abc123...": { "Name": "dtpg", "IPv4Address": "172.18.0.2/16" }, "def456...": { "Name": "cloudbeaver", "IPv4Address": "172.18.0.3/16" }
}
"Containers": { "abc123...": { "Name": "dtpg", "IPv4Address": "172.18.0.2/16" }, "def456...": { "Name": "cloudbeaver", "IPv4Address": "172.18.0.3/16" }
}
$ -weight: 500;">docker -weight: 500;">stop dtpg cloudbeaver
$ -weight: 500;">docker volume rm pgdata cbdata
$ -weight: 500;">docker network rm dtstack
$ -weight: 500;">docker -weight: 500;">stop dtpg cloudbeaver
$ -weight: 500;">docker volume rm pgdata cbdata
$ -weight: 500;">docker network rm dtstack
$ -weight: 500;">docker -weight: 500;">stop dtpg cloudbeaver
$ -weight: 500;">docker volume rm pgdata cbdata
$ -weight: 500;">docker network rm dtstack
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg --network dtstack -e POSTGRES_PASSWORD=-weight: 500;">docker -e POSTGRES_DB=testdb -v pgdata:/var/lib/postgresql/data --tmpfs /var/run/postgresql postgres:17
$ -weight: 500;">docker run -d --rm --name cloudbeaver --network dtstack -p 8978:8978 -v cbdata:/opt/cloudbeaver/workspace dbeaver/cloudbeaver:latest
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg --network dtstack -e POSTGRES_PASSWORD=-weight: 500;">docker -e POSTGRES_DB=testdb -v pgdata:/var/lib/postgresql/data --tmpfs /var/run/postgresql postgres:17
$ -weight: 500;">docker run -d --rm --name cloudbeaver --network dtstack -p 8978:8978 -v cbdata:/opt/cloudbeaver/workspace dbeaver/cloudbeaver:latest
$ -weight: 500;">docker network create dtstack
$ -weight: 500;">docker run -d --rm --name dtpg --network dtstack -e POSTGRES_PASSWORD=-weight: 500;">docker -e POSTGRES_DB=testdb -v pgdata:/var/lib/postgresql/data --tmpfs /var/run/postgresql postgres:17
$ -weight: 500;">docker run -d --rm --name cloudbeaver --network dtstack -p 8978:8978 -v cbdata:/opt/cloudbeaver/workspace dbeaver/cloudbeaver:latest - ποΈ If you -weight: 500;">restart the container, the IP changes
- π You'd need to manually -weight: 500;">update configs every time
- π No network isolation β anything can reach anything
- π No way to access containers from your browser - Port mapping β exposing container ports to your browser
- Custom bridge networks β containers that find each other by name
- DNS resolution β no more -weight: 500;">docker inspect to find IPs
- Network isolation β keeping your services segmented - Docker installed (rootless mode recommended)
- Ep 1-5 completed β you know volumes, environment variables, and bind mounts
- 5 minutes to wire up your first multi-container setup - Server: dtpg
- Username: postgres
- Password: -weight: 500;">docker
- Database: testdb - The second command is a 150-character wall of flags, environment variables, and volume mounts
- One typo in --tmpfs and PostgreSQL silently starts but fails to accept connections
- Forget --network dtstack and the containers won't find each other
- Tear it down and rebuild? Type it all again
- What about when you have 5 containers? 10? Shared volumes? Secret files? Restart policies? - LinkedIn: Share with your network
- Twitter: Tweet about it
- Questions? Drop a comment below or reach out on LinkedIn