0

I am trying to set up a Learning Locker server within Docker (on Windows 10, Docker using WSL for emulation) using the repo from michzimney. This service is composed of several Docker containers (Mongo, Redis, NGINX, etc) networked together. Using the provided docker-compose.yml file I have been able to set up the service and access it from localhost, but I cannot access the server from any machine on the rest of my home network.

This is a specific case, but some guidance will be valuable as I am very new to Docker and will need to build many such environments in the future, for now in Windows but later in Docker on Synology, where the services can be access from network and internet.

My research has led me to user-defined bridging using docker -p [hostip]:80:80 but this didn't work for me. I have also turned off Windows firewall since that seems to cause a host of issues for some but still no effect. I tried to bridge my virtual switch manager for WSL using Windows 10 Hyper-V manager, but that didn't work, and I have tried bridging the WSL connector to LAN using basic Windows 10 networking but that didn't work and I had to reset my network.

  • So the first question is is this a Windows networking issue or a Docker configuration issue?
  • The second question, assuming it's a Docker configuration issue, is how can I modify the following YML file to make the service accessible to the outside network:
version: '2'
services:

   mongo:
       image: mongo:3.4
       restart: unless-stopped
       volumes:
           - "${DATA_LOCATION}/mongo:/data/db"

   redis:
       image: redis:4-alpine
       restart: unless-stopped

   xapi:
       image: learninglocker/xapi-service:2.1.10
       restart: unless-stopped
       environment:
           - MONGO_URL=mongodb://mongo:27017/learninglocker_v2
           - MONGO_DB=learninglocker_v2
           - REDIS_URL=redis://redis:6379/0
       depends_on:
           - mongo
           - redis
       volumes:
           - "${DATA_LOCATION}/xapi-storage:/usr/src/app/storage"

   api:
       image: michzimny/learninglocker2-app:${DOCKER_TAG}
       environment:
           - DOMAIN_NAME
           - APP_SECRET
           - SMTP_HOST
           - SMTP_PORT
           - SMTP_SECURED
           - SMTP_USER
           - SMTP_PASS
       command: "node api/dist/server"
       restart: unless-stopped
       depends_on:
           - mongo
           - redis
       volumes:
           - "${DATA_LOCATION}/app-storage:/opt/learninglocker/storage"

   ui:
       image: michzimny/learninglocker2-app:${DOCKER_TAG}
       environment:
           - DOMAIN_NAME
           - APP_SECRET
           - SMTP_HOST
           - SMTP_PORT
           - SMTP_SECURED
           - SMTP_USER
           - SMTP_PASS
       command: "./entrypoint-ui.sh"
       restart: unless-stopped
       depends_on:
           - mongo
           - redis
           - api
       volumes:
           - "${DATA_LOCATION}/app-storage:/opt/learninglocker/storage"
           - "${DATA_LOCATION}/ui-logs:/opt/learninglocker/logs"

   worker:
       image: michzimny/learninglocker2-app:${DOCKER_TAG}
       environment:
           - DOMAIN_NAME
           - APP_SECRET
           - SMTP_HOST
           - SMTP_PORT
           - SMTP_SECURED
           - SMTP_USER
           - SMTP_PASS
       command: "node worker/dist/server"
       restart: unless-stopped
       depends_on:
           - mongo
           - redis
       volumes:
           - "${DATA_LOCATION}/app-storage:/opt/learninglocker/storage"

   nginx:
       image: michzimny/learninglocker2-nginx:${DOCKER_TAG}
       environment:
           - DOMAIN_NAME
       restart: unless-stopped
       depends_on:
           - ui
           - xapi
       ports:
           - "443:443"
           - "80:80"

So far I have attempted to change the ports option to the following:

        ports:
            - "192.168.1.102:443:443"
            - "192.168.1.102:80:80"

But then the container wasn't even accessible from the host machine anymore. I also tried adding network-mode=host under the nginx service but the build failed saying it was not compatible with port mapping. Do I need to set network-mode=host for every service or is the problem something else entirely?

Any help is appreciated.

Nathanael
  • 59
  • 1
  • 9

1 Answers1

1

By the looks of your docker-compose.yml, you are exposing ports 80 & 443 to your host (Windows machine). So, if your windows IP is 192.168.1.102 - you should be able to reach http://192.168.1.102 & https://192.168.1.102 on your LAN if there is nothing blocking it (firewall etc.).

You can confirm that you are indeed listening on those ports by running 'netstat -a' and checking to see if you are LISTENING on those ports.

Terry Sposato
  • 572
  • 2
  • 7
  • Strange on port 80 netstat reports TIME_WAIT but on port 443, with the firewall completely turned off (I had already added a rule for 443) it finally connected! Thank you! I thought I was doing something terribly wrong. – Nathanael Mar 16 '21 at 23:48