Potrzebuję uruchomić oba kontenery z aplikacją na porcie 80. docker-compose.yml wygląda tak:

services:
www_app1:
image: app1
container_name: www_app1
restart: unless-stopped
ports:
- 80:80
networks:
- www
volumes:
- ./storage:/var/www/app/storage
www_app2:
image: app2
container_name: www_app2
restart: unless-stopped
ports:
- 80:80
networks:
- www
volumes:
- ./storage:/var/www/app/storage
networks:
www:
external: true

Nie mogę zastosować żadnego reverse proxy, a poza tym konieczny jest dostęp poprzez adres IP zamiast domen. Jakie rozwiazanie sugerujesz?
Apr 15, 7:47am

Problem polega na tym, że obie usługi próbują używać tego samego portu (80) na hoście, co jest niemożliwe — port może być przypisany tylko do jednej usługi na raz. Rozwiązaniem jest zmiana portów hosta dla co najmniej jednego z kontenerów, aby nie kolidowały ze sobą.

Propozycja rozwiązania

Zmodyfikuj plik docker-compose.yml tak, aby każdy kontener używał innego portu na hoście, np.:

yaml
services:
  www_app1:
    image: app1
    container_name: www_app1
    restart: unless-stopped
    ports:
      - "8080:80"  # Port 8080 na hoście → port 80 w kontenerze
    networks:
      - www
    volumes:
      - ./storage:/var/www/app/storage

  www_app2:
    image: app2
    container_name: www_app2
    restart: unless-stopped
    ports:
      - "8081:80"  # Port 8081 na hoście → port 80 w kontenerze
    networks:
      - www
    volumes:
      - ./storage:/var/www/app/storage

networks:
  www:
    external: true

Jak to działa?

  • 8080:80 — Port 8080 na hoście jest mapowany na port 80 w kontenerze www_app1.
  • 8081:80 — Port 8081 na hoście jest mapowany na port 80 w kontenerze www_app2.

Dostęp do aplikacji

  • Aplikacja 1 będzie dostępna pod adresem: http://<IP_SERWERA>:8080
  • Aplikacja 2 będzie dostępna pod adresem: http://<IP_SERWERA>:8081

Alternatywa: Użycie różnych adresów IP

Jeśli masz wiele adresów IP przypisanych do serwera, możesz przypisać każdy kontener do innego adresu IP, zachowując port 80:

yaml
services:
  www_app1:
    image: app1
    container_name: www_app1
    restart: unless-stopped
    ports:
      - "192.168.1.100:80:80"  # Adres IP 1 → port 80
    networks:
      - www
    volumes:
      - ./storage:/var/www/app/storage

  www_app2:
    image: app2
    container_name: www_app2
    restart: unless-stopped
    ports:
      - "192.168.1.101:80:80"  # Adres IP 2 → port 80
    networks:
      - www
    volumes:
      - ./storage:/var/www/app/storage

Uwaga: Ta opcja wymaga, aby serwer miał przypisane co najmniej dwa publiczne adresy IP.


Podsumowanie

  • Najprostsze rozwiązanie: Zmień porty hosta (np. 8080:80 i 8081:80).
  • Alternatywa: Użyj różnych adresów IP, jeśli są dostępne.

Czy chcesz, abym pomógł Ci dostosować to rozwiązanie do Twojej konkretnej infrastruktury?

Apr 15, 7:47am

This is a shared conversation and may include unverified content that doesn't reflect Mistral AI's views. Login to resume chatting.