diff --git a/Makefile b/Makefile
index da42881776cc2e946ed113fece139345f3023408..9cc29a1d2b232b341f2a1a0f9a7a32e87988d298 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 
 include librephotos.env
 DOCKER_TAG ?= ownphotos-backend
-REPLACE_NAMES=sed 's/__backend_name__/$(BACKEND_CONT_NAME)/g; s/__frontend_name__/$(FRONTEND_CONT_NAME)/g; s/__proxy_name__/$(PROXY_CONT_NAME)/g; s/__redis_name__/$(REDIS_CONT_NAME)/g; s/__db_name__/$(DB_CONT_NAME)/g; s/__pgadmin_name__/$(PGADMIN_CONT_NAME)/g'
+REPLACE_NAMES=sed 's/__backend_name__/$(BACKEND_CONT_NAME)/g; s/__frontend_name__/$(FRONTEND_CONT_NAME)/g; s/__proxy_name__/$(PROXY_CONT_NAME)/g; s/__redis_name__/$(REDIS_CONT_NAME)/g; s/__db_name__/$(DB_CONT_NAME)/g; s/__pgadmin_name__/$(PGADMIN_CONT_NAME)/g; s/__network_name__/$(NETWORK_NAME)/g'
 
 default: build
 
diff --git a/docker-compose.dev.raw b/docker-compose.dev.raw
index 35d99ade46fc3a1f6bdb81d4651fc051ea4ab6be..df8e619da483fe164b1205e9c5350d4dfce7a230 100644
--- a/docker-compose.dev.raw
+++ b/docker-compose.dev.raw
@@ -21,6 +21,7 @@ services:
     build:
       context: ./proxy
       dockerfile: Dockerfile
+    container_name: __proxy_name__
     volumes:
       - ${myPhotos}:/data
       - ${proMedia}:/protected_media
@@ -30,9 +31,11 @@ services:
     tty: true
     environment:
     - DEBUG=1
+    - WDS_SOCKET_PORT=0 # needed for webpack-dev-server
     build:
       context: ./frontend
       dockerfile: Dockerfile.dev
+    container_name: __frontend_name__
     volumes:
       - ${codedir}/librephotos-frontend:/usr/src/app
 
@@ -46,6 +49,7 @@ services:
       dockerfile: Dockerfile
       args:
         DEBUG: 1
+    container_name: __backend_name__
     volumes:
       - ${myPhotos}:/data
       - ${proMedia}:/protected_media
@@ -59,11 +63,12 @@ services:
 
   __pgadmin_name__:
     image: dpage/pgadmin4
+    container_name: __pgadmin_name__
     environment:
       PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@admin.com}
       PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
     volumes:
-       - $HOME/pgadmin:/root/.pgadmin
+       - ${pgAdminLocation}/pgadmin:/root/.pgadmin
     ports:
       - "3001:80"
     restart: unless-stopped
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index b30ac351eb4be2ba086c4278b80a777ae8d1084b..9b6a71d0d1089c7c61bdda2da76eeadf09bcb64c 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -21,6 +21,7 @@ services:
     build:
       context: ./proxy
       dockerfile: Dockerfile
+    container_name: proxy
     volumes:
       - ${myPhotos}:/data
       - ${proMedia}:/protected_media
@@ -34,6 +35,7 @@ services:
     build:
       context: ./frontend
       dockerfile: Dockerfile.dev
+    container_name: frontend
     volumes:
       - ${codedir}/librephotos-frontend:/usr/src/app
 
@@ -47,6 +49,7 @@ services:
       dockerfile: Dockerfile
       args:
         DEBUG: 1
+    container_name: backend
     volumes:
       - ${myPhotos}:/data
       - ${proMedia}:/protected_media
@@ -60,11 +63,12 @@ services:
 
   pgadmin:
     image: dpage/pgadmin4
+    container_name: pgadmin
     environment:
       PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@admin.com}
       PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
     volumes:
-       - $HOME/pgadmin:/root/.pgadmin
+       - ${pgAdminLocation}/pgadmin:/root/.pgadmin
     ports:
       - "3001:80"
     restart: unless-stopped
diff --git a/docker-compose.raw b/docker-compose.raw
index 3ca8c63e5cf730f642e15a3c0756a70ffd6bc6eb..ba345930d971e2de9b978ae5cdcc0cd5c47425b4 100644
--- a/docker-compose.raw
+++ b/docker-compose.raw
@@ -11,6 +11,7 @@ version: "3.8"
 services:
   __proxy_name__:
     image: reallibrephotos/librephotos-proxy:${tag}
+    container_name: __proxy_name__
     restart: unless-stopped
     volumes:
       - ${myPhotos}:/data
@@ -24,6 +25,7 @@ services:
 
   __db_name__:
     image: postgres:13
+    container_name: __db_name__
     restart: unless-stopped
     environment:
       - POSTGRES_USER=${dbUser}
@@ -35,12 +37,14 @@ services:
 
   __frontend_name__:
     image: reallibrephotos/librephotos-frontend:${tag}
+    container_name: __frontend_name__
     restart: unless-stopped
     depends_on:
       - __backend_name__
 
   __backend_name__:
     image: reallibrephotos/librephotos:${tag}
+    container_name: __backend_name__
     restart: unless-stopped
     volumes:
       - ${myPhotos}:/data
@@ -75,4 +79,5 @@ services:
 
   __redis_name__:
     image: redis:6
+    container_name: __redis_name__
     restart: unless-stopped
diff --git a/docker-compose.yml b/docker-compose.yml
index 5fb8b486a387c06b3587f1c06cb2a6d341c69639..91eada5fd0fa3752e043b669ff86bcbf165840a7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -11,10 +11,12 @@ version: "3.8"
 services:
   proxy:
     image: reallibrephotos/librephotos-proxy:${tag}
+    container_name: proxy
     restart: unless-stopped
     volumes:
       - ${myPhotos}:/data
       - ${proMedia}:/protected_media
+      - ./proxy/nginx.conf:/etc/nginx/nginx.conf:ro
     ports:
       - ${httpPort}:80
     depends_on:
@@ -23,6 +25,7 @@ services:
 
   db:
     image: postgres:13
+    container_name: db
     restart: unless-stopped
     environment:
       - POSTGRES_USER=${dbUser}
@@ -34,12 +37,14 @@ services:
 
   frontend:
     image: reallibrephotos/librephotos-frontend:${tag}
+    container_name: frontend
     restart: unless-stopped
     depends_on:
       - backend
 
   backend:
     image: reallibrephotos/librephotos:${tag}
+    container_name: backend
     restart: unless-stopped
     volumes:
       - ${myPhotos}:/data
@@ -74,4 +79,5 @@ services:
 
   redis:
     image: redis:6
+    container_name: redis
     restart: unless-stopped
diff --git a/librephotos.env b/librephotos.env
index 6b0d53030b725b6dd2058b3d4bb2a20f63792772..44505b2cb9883588372fba197350f22a6df346f9 100644
--- a/librephotos.env
+++ b/librephotos.env
@@ -42,7 +42,6 @@ shhhhKey=D2VymuMn2gAhx4tmAawd
 
 #What port should Libre Photos be accessed at (Default 3000)
 httpPort=3000
-
 # ------------------------------------------------------------------------------------------------
 
 # Wow, we are at the optional now. Pretty easy so far. You do not have to change any of the below. 
@@ -86,11 +85,20 @@ FRONTEND_CONT_NAME=frontend
 PROXY_CONT_NAME=proxy
 REDIS_CONT_NAME=redis
 PGADMIN_CONT_NAME=pgadmin
+NETWORK_NAME=libre-photos-net
 
 # ---------------------------------------------------------------------------------------------
 
 # If you are not a developer ignore the following parameters: you will never need them.
 
-# Where shall we store the backend and frontend code files. 
+# Where shall we store the backend and frontend code files.
 codedir=./librephotos/code
 
+# Location for pgAdmin
+pgAdminLocation=./librephotos/pgadmin
+
+# Which subnet should the docker network use
+subnet=172.19.0.0/16
+
+# On which Gateway should the proxy container be accessible
+gateway=172.19.0.1
\ No newline at end of file
diff --git a/proxy/nginx.conf b/proxy/nginx.conf
index 79ff37aedd063edf4b5200b234983f977b37a9e3..e4fdc65f2f93c41cdda564deb57a36bee842c249 100644
--- a/proxy/nginx.conf
+++ b/proxy/nginx.conf
@@ -28,12 +28,11 @@ http {
     }
     # needed for webpack-dev-server
     location /ws {
-        proxy_pass http://frontend:3000;
-        proxy_http_version 1.1;
-        proxy_set_header Upgrade $http_upgrade;
-        proxy_set_header Connection "upgrade";
+      proxy_pass http://frontend:3000;
+      proxy_http_version 1.1;
+      proxy_set_header Upgrade $http_upgrade;
+      proxy_set_header Connection "upgrade";
     }
-
     # Django media
     location /protected_media  {
         internal;
diff --git a/proxy/nginx.raw b/proxy/nginx.raw
index 291d8315cd3ff4f750c4d76e70386d81b6381abc..aff6cb1fa220b14e423031d2f0a4adeff7a20192 100644
--- a/proxy/nginx.raw
+++ b/proxy/nginx.raw
@@ -26,6 +26,13 @@ http {
       include uwsgi_params;
       proxy_pass http://__backend_name__:8001;
     }
+    # needed for webpack-dev-server
+    location /ws {
+      proxy_pass http://__frontend_name__:3000;
+      proxy_http_version 1.1;
+      proxy_set_header Upgrade $http_upgrade;
+      proxy_set_header Connection "upgrade";
+    }
     # Django media
     location /protected_media  {
         internal;