Pytanie 1: Nie Użytkownik root nie może utworzyć aplikacji Nginx za pomocą numeru portu 80?

Podman nie może tworzyć kontenerów, które wiążą się z portami <1024.

Niech użytkownicy nie mogą wiązać się z portami <1024, więc wymaga to korzenia.

Więc mogę stworzyć tylko Nginx pod rootem? Potrzebuję również PHP i Mariadb, aby wspierać moją witrynę, próbowałem odnieść się do PHP w pliku konfiguracyjnym Nginx:

location ~ \.php(.*)$ {
    fastcgi_pass   php:9000;
    ...
}

Sprawdź z nginx -t i zgłoś błąd: nginx: [emerg] host not found in upstream "php" in ...

Ale doker pracuje w ten sposób

Co powinienem zrobić?

0
zeronofreya 23 marzec 2020, 04:54

1 odpowiedź

Najlepsza odpowiedź

Dacker Daemon, biegający z uprawnieniami korzeni, zarządza sieciami na poziomie systemu. Tworzy dodatkowe sieci, w których kontenery Docker mają adres IP i łączy gospodarz w tych sieciach.

O ile mogę powiedzieć, korzenny proces podmera tworzy również te sieci, ale nie można połączyć gospodarza w tych wewnętrznych sieciach podmanów, ponieważ nie ma wystarczających przywilejów.

Ale Podmer Korzystny może mapować porty pojemników do portów> 1024, ponieważ nie wymaga to uprawnień korzeniowych.

Mój obejście:

  1. Udostępniam aplikację internetową działającą w moim korzeniowym pojemniku podmerze do wysokiego portu, takiego jak 8090, dostępny tylko z 127.0.0.1 (więc tylko ruch z gospodarza może się tam dostać).
  2. Konfigurowuję Ruch Rexy Nginx do proxy_pass przychodzącego ruchu z Port 443 do Port 8090.

W ten sposób aplikacja internetowa może uruchomić się w pojemniku korzeniowym i nadal być dostępny w standardowym porcie, takim jak 80 lub 443. Z NGGEX jako rewers proxy, możesz nawet zarządzać świadectwami Szyfruj w centralnym punkcie.

Uwaga: W kroku 1 musisz określić mapowanie portów na polecenie podmana. Coś takiego jak podman run -p 127.0.0.1:8090:80 image.

I na kompletność moja konfiguracja Nginx wygląda podobnie do tego:

server {
        server_name example.org;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                proxy_pass http://127.0.0.1:8080/;
        }
}
1
missytake 9 maj 2020, 13:52