我对Docker和Nginx非常陌生,这可能是一个愚蠢的问题,但是我怎样才能指出我的nginx框在Rails的公共文件? 基本上,我有一个nginx框和一个应用程序框。 我想知道在哪里可以放置这些文件,以便nginx框可以读取它们。
version: "3" services: api: build: "./api" env_file: - .env-dev ports: - "3000:3000" depends_on: - db volumes: - .:/app/api command: rails server -b "0.0.0.0" nginx: build: ./nginx env_file: .env-dev volumes: - .:/app/nginx depends_on: - api links: - api ports: - "80:80" ...
Api dockerfile:
FROM ruby:2.4.1-slim RUN apt-get update && apt-get install -qq -y \ build-essential \ libmysqlclient-dev \ nodejs \ --fix-missing \ --no-install-recommends ENV INSTALL_PATH /api RUN mkdir -p $INSTALL_PATH WORKDIR $INSTALL_PATH COPY Gemfile $INSTALL_PATH RUN bundle install COPY . . EXPOSE 3000
Nginx的Dockerfile:
FROM nginx ENV INSTALL_PATH /nginx RUN mkdir -p $INSTALL_PATH COPY nginx.conf /etc/nginx/nginx.conf # COPY ? EXPOSE 80
nginxconfiguration(这是正确的复制)
daemon off; worker_processes: 1; events { worker_connections: 1024; } http { sendfile on; gzip on; gzip_http_version 1.0; gzip_proxied any; gzip_min_length 500; gzip_disable "MSIE [1-6]\."; gzip_types text/plain text/xml text/css text/comma-separated-values text/javascript application/x-javascript application/atom+xml; # Rails Api upstream api { server http://api/; } # Configuration for the server server { # Running port listen 80; # Proxying the connections connections location /api { proxy_pass http://api; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /public/50x.html error_page 404 /public/404.html location = /50x.html { root /api/public; } location = /404.html { root /api/public } } }
现在,当我去localhost:80
它显示通用nginx文件夹。 但是,我不确定如何将rails api / public /的公共目录链接到nginx容器。
我可以只是COPY path/to/rails/public path/nginx
。 nginx希望在哪里find这些文件?
编辑
我相信我应该把它们放在/var/www/app_name
,对吗?
nginx上静态内容的默认位置是/etc/nginx/html
,但只要记得添加,你可以把它放在var/www/app_name
中
root /var/www/app_name
在相应的location
块为您的静态内容。
我认为你应该通过在容器'nginx'中安装一个容器“api”来达到目的,例如:
version: "3" services: api: image: apiimg volumes: - apivol:/path/to/statics nginx: image: nginximg volumes: - apivol:/var/www/statics volumes: apivol: {}
因此,为所有容器声明了一个共享卷, apivol
,将其映射到Rails容器上的/path/to/statics
apivol
以及nginx容器中的/var/www/statics
。 这样你就不需要手动将任何东西拷贝到nginx容器中。