Background:
I am trying to deploy a multi-container web app using docker-compose. Docker compose file is shared below. backoffice and frontoffice (laravel) images are being pulled from ACR. Rest 2 needs to be downloaded from docker registry itself.
Issues:
My deployments gets failed as below;
- against mysql and/or nginx i get below error;
2025-04-16T09:58:21.792Z ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head "https://registry-1.docker.io/v2/library/nginx/manifests/alpine": unauthorized: incorrect username or password"}
2025-04-16T09:58:21.795Z ERROR - Pulling docker image nginx:alpine failed: 2. When I open the Default or custom urls that have been configured for both the applications in web app, i see only nginx default page. I am unsure how to route the traffic to respective service based on custom domain. (nginx config file also attached below)
docker-compose.yml
services: ekyc-backoffice: build: context: ./dockerfiles dockerfile: Dockerfile-backoffice container_name: ekyc-backoffice image: ekyc-backoffice:latest restart: always environment: VIRTUAL_HOST: tekyc.tesspayments.com SERVICE_NAME: backoffice ports: - 9000:9000 depends_on: - ekyc-db ekyc-frontoffice: build: context: ./dockerfiles dockerfile: Dockerfile-frontoffice container_name: ekyc-frontoffice image: ekyc-frontoffice:latest restart: always environment: VIRTUAL_HOST: tmerchant-onboarding.tesspayments.com SERVICE_NAME: frontoffice ports: - 9001:9000 depends_on: - ekyc-db ekyc-nginx: image: nginx:alpine container_name: ekyc-nginx restart: always ports: - "80:80" volumes: - NGINX_SITES_CONFIG:/etc/nginx/conf.d/ depends_on: - ekyc-backoffice - ekyc-frontoffice ekyc-db: image: mysql container_name: ekyc-db restart: always environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - MYSQL_DATA:/var/lib/mysql - MYSQL_LOGS:/var/log/mysql - MYSQL_QL:/docker-entrypoint-initdb.d volumes: NGINX_SITES_CONFIG: driver: azure_file driver_opts: share_name: nginx-sites-conf # Must match the Azure File Share name storage_account_name: storageekyctessprod # From your AZURE_STORAGE_ACCOUNT MYSQL_DATA: driver: azure_file driver_opts: share_name: mysql-data # Must match the Azure File Share name storage_account_name: storageekyctessprod # From your AZURE_STORAGE_ACCOUNT MYSQL_LOGS: driver: azure_file driver_opts: share_name: mysql-logs # Must match the Azure File Share name storage_account_name: storageekyctessprod # From your AZURE_STORAGE_ACCOUNT MYSQL_QL: driver: azure_file driver_opts: share_name: mysql-ql # Must match the Azure File Share name storage_account_name: storageekyctessprod # From your AZURE_STORAGE_ACCOUNT
default.conf
server { listen 0.0.0.0:80; server_name tekyc.tesspayments.com; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port '443'; proxy_pass https://webapp-ekyc-prod-f0a6bpb0acfbdpah.qatarcentral-01.azurewebsites.net:9000/; } } server { listen 0.0.0.0:80; server_name tmerchant-onboarding.tesspayments.com; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; location / { proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port '443'; proxy_pass https://webapp-ekyc-prod-f0a6bpb0acfbdpah.qatarcentral-01.azurewebsites.net:9000/; } }