将nginx容器指向docker中的静态文件

我对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容器中。