2015-01-04 19 views
15

Właśnie zaczął używać docker a następnie poniższy poradnik: https://docs.docker.com/engine/admin/using_supervisord/Jak używać kontenera dokera jako serwera apache?

FROM ubuntu:14.04 
RUN apt-get update && apt-get upgrade 
RUN apt-get install -y openssh-server apache2 supervisor 
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor 
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
EXPOSE 22 80 
CMD ["/usr/bin/supervisord"] 

i

[supervisord] 
nodaemon=true 

[program:sshd] 
command=/usr/sbin/sshd -D 

[program:apache2] 
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" 

budowy i uruchomienia:

sudo docker build -t <yourname>/supervisord . 
sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord 

Moje pytanie brzmi, kiedy doker działa na moim serwerze z IP http://88.xxx.x.xxx/, w jaki sposób mogę uzyskać dostęp do lokalnego hosta apache z poziomu przeglądarki na moim komputerze? Chciałbym użyć kontenera dokera jako serwera WWW.

Odpowiedz

20

Będziesz musiał użyć portu spedycja aby móc uzyskać dostęp do pojemnika Döcker od świata zewnętrznego.

Z Docker docs:

Domyślnie kontenerów Docker może nawiązywać połączenia ze światem zewnętrznym, ale świat na zewnątrz nie może połączyć się z pojemników.

Ale jeśli chcesz, aby kontenery akceptowały połączenia przychodzące, musisz podać specjalne opcje podczas wywoływania docker run.

Co to oznacza? Musisz określić port na komputerze głównym (zazwyczaj port 80) i przekazać wszystkie połączenia na tym porcie do kontenera docker. Ponieważ uruchamiasz Apache w swoim kontenerze dokowania, prawdopodobnie chcesz również przekazać połączenie do portu 80 w kontenerze dokowania.

Najlepiej zrobić to za pomocą opcji -p dla polecenia docker run.

sudo docker run -p 80:80 -t -i <yourname>/supervisord 

część polecenia, które mówi -p 80:80 oznacza, że ​​port przekazania 80 z hosta do portu 80 na pojemniku.

Po prawidłowym skonfigurowaniu można użyć przeglądarki do surfowania po http://88.x.x.x, a połączenie zostanie przekazane do kontenera zgodnie z przeznaczeniem.

Urządzenie Docker docs opisuje dokładnie opcję -p. Istnieje kilka sposobów określania flagę:

# Maps the provided host_port to the container_port but only 
# binds to the specific external interface 
-p IP:host_port:container_port 

# Maps the provided host_port to the container_port for all 
# external interfaces (all IP:s) 
-p host_port:container_port 

Edit: Kiedy kwestia ta została pierwotnie pisał nie było oficjalnego pojemnik doker dla serwera Apache. Teraz istnieje istniejąca wersja.

Najprostszym sposobem na uruchomienie Apache jest użycie official Docker container. Można go uruchomić za pomocą następującego polecenia:

$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 

W ten sposób można łatwo zamontować folder w systemie plików, tak że jest on dostępny w pojemniku Döcker i twój port hosta jest przekazywany do portu kontenerowego w sposób opisany powyżej .

+0

Czy można uzyskać dostęp do Apache w takim kontenerze, przechodząc do nazwanej domeny, a nie adresu IP? Mam działający kontener, do którego mam dostęp, przechodząc do 'http: // 127.0.0.1 /', ale chciałbym zmienić na przykład na 'http: // website.localhost /'. –

+0

To jakoś nie działa tak po prostu. Dodatkowo dodałem serwer Nginx, który proxował żądania z witryny internetowej.localhostto 127.0.0.1, a następnie zadziałało. –

12

Istnieje oficjalny obraz dla apache. Dokumentacja obrazu zawiera instrukcje, w jaki sposób można wykorzystać oficjalne obrazy jako bazę dla niestandardowego obrazu.

Aby zobaczyć, jak to się robi rzuć okiem na Dockerfile używany przez urzędowego obrazu:

https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile

przykładu

Zapewnienie pliki są dostępne do wykorzenienia

sudo chown -R root:root /path/to/html_files 

Host te pliki przy użyciu oficjalnego obrazu dokowanego

docker run -d -p 80:80 --name apache -v /path/to/html_files:/usr/local/apache2/htdocs/ httpd:2.4 

Pliki są dostępne na porcie 80.

Powiązane problemy