Ich benutze boot2docker, seit ich Mac OSX benutze. Ich kann nicht herausfinden, wie statische Dateien mit nginx, die in einem Docker-Container (der auch die statischen Assets wie meine HTML und Js enthält) ausgeführt wird.Wie stehe ich statische Dateien mit Nginx in einem Andock-Container?
ich vier Docker-Container wird mit diesem Docker-compose.yml haben gesponnen up:
web:
build: ./public
links:
- nodeapi1:nodeapi1
ports:
- "80:80"
nodeapi1:
build: ./api
links:
- redis
- db
ports:
- "5000:5000"
volumes:
- ./api:/data
redis:
image: redis:latest
ports:
- "6379:6379"
db:
image: postgres:latest
environment:
POSTGRES_USER: root
ports:
- "5432:5432"
Das ist mein nginx.conf:
worker_processes auto;
daemon off;
events {
worker_connections 1024;
}
http {
server_tokens off;
upstream node-app {
ip_hash;
server 192.168.59.103:5000;
}
server {
listen 80;
index index.html;
root /var/www;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1d;
}
location/{
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_pass http://node-app;
proxy_cache_bypass $http_upgrade;
}
}
}
Mein Dockerfile für Mein Webbuild (enthält meine nginx.conf und statische Assets):
# Pull nginx base image
FROM nginx:latest
# Expost port 80
EXPOSE 80
# Copy custom configuration file from the current directory
COPY nginx.conf /etc/nginx/nginx.conf
# Copy static assets into var/www
COPY ./dist /var/www
COPY ./node_modules /var/www/node_modules
# Start up nginx server
CMD ["nginx"]
Der Inhalt des Ordners ./dist ist eine Datei "bundle.js" und eine Datei "index.html". Das Datei-Layout ist:
public
-- Dockerfile
-- nginx.conf
-- dist (directory)
-- bundle.js
-- index.html
-- node_modules
...various node modules
Es ist richtig Anfragen an meine Knoten Server zu senden (die auch in einem Docker Behälter ist, weshalb mein Upstream-Server verweist auf die boot2docker ip ist), aber ich bin gerade erst 404s für Versuche, meine statischen Assets abzurufen.
Ich bin bezüglich der nächsten Schritte verloren. Wenn ich irgendwelche Informationen zur Verfügung stellen kann, lass es mich wissen.
Danke für die Antwort! Nachdem ich Ihre Konfiguration übernommen habe, erhalte ich nun einen 404 von meinem Node-Server und einige klobige Antworten von meinem Nginx-Server: 192.168.59.3 - - [04/Aug./2015: 10: 43: 23 +0000] "GET/HTTP/1.1 "404 13" - "" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/44.0.2304.125 Safari/537.36 " –
Das Konfigurationsbeispiel in meiner Antwort ist ein Beispiel Das funktioniert nur, wenn Ihre App so konzipiert ist, dass ihre statischen Dateien unter '/ static /' bereitgestellt werden. Wenn dies für Ihre App nicht der Fall ist, müssen Sie dieses Conf anpassen. Wie auch immer, dies sollte es Ihnen erlauben, sich auf Ihre nginx-Konfiguration zu konzentrieren und die Suche nach docker zu stoppen;) – Thomasleveil
mit "alias" anstelle von "root" hat es für mich behoben –