2

我创建了一个关于 php 的多容器应用程序。当我修改 php 文件时,我可以在浏览器中看到更改。但是,当我修改css和js等静态文件时,浏览器没有任何变化。以下是我的 Dockerfile 代码:

Dockerfile

`FROM nginx:1.8
`ADD default.conf /etc/nginx/conf.d/default.conf
`ADD nginx.conf /etc/nginx/nginx.conf
`WORKDIR /Code/project/
`RUN chmod -R 777 /Code/project/
`VOLUME /Code/project

默认.conf

`server {
listen       80;
server_name  localhost;

root   /Code/project/public;
index  index.html index.htm index.php;
#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}


#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
#error_page   500 502 503 504  /50x.html;
#location = /50x.html {
 #   root   /usr/share/nginx/html;
#}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass   fpm:9000;
    #fastcgi_pass   127.0.0.1:9000;   
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
 }

nginx.conf

user  root;
worker_processes  8;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
     worker_connections  1024;
}


http {
   include       /etc/nginx/mime.types;
   default_type  application/octet-stream;

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

   access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;
client_max_body_size 20m;

#gzip  on;

include /etc/nginx/conf.d/*.conf;
}`

码头工人-compose.yml

webphp:
    image: index.alauda.cn/chuanty/local_php
    #image: index.alauda.cn/chuanty/local_nginx:snapshot
    ports:
     - "9000:9000"
volumes:
     - .:/Code/project
links:
     - cache:cache
     - db:db
     - es:localhost
extra_hosts:
     - "chaunty.taurus:192.168.99.100"  

cache:
     image: redis
ports:
     - "6379:6379"
db:
  #image: mysql
  image: index.alauda.cn/alauda/mysql
  ports:
      - "3306:3306"
environment:
   MYSQL_ROOT_PASSWORD: chuantaiyidev
   MYSQL_USER: cty
   MYSQL_PASSWORD: chuantaiyidev
   MYSQL_DATABASE: taurus
es:
   image: index.alauda.cn/chuanty/local_elasticsearch
ports:
   - "9200:9200"
   - "9300:9300"

server:
   #image: index.alauda.cn/ryugou/nginx
   image: index.alauda.cn/chuanty/local_nginx:1.1
ports:
   - "80:80"
   - "443:443"
links:
   - webphp:fpm  
volumes_from:
   - webphp:rw
4

3 回答 3

4

我猜你的问题是你的 nginx.conf 中的“sendfile on”。

出于开发目的,请尝试在服务器块的服务器指令中将其设置为关闭:

server {
    ...

    sendfile off;
}

这将强制重新加载静态文件,例如 css 和 js。nginx 不会从内存中加载文件。

http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile

于 2017-02-04T13:32:20.400 回答
1

一种选择是将修改后的静态文件直接复制到 Docker 容器中:

docker cp web/static/main.js container_name:/usr/src/app/static/main.js

  • web/static是主机上的静态目录
  • main.js是修改后的文件
  • container_name是容器的名称,可以通过docker ps
  • /usr/src/app/static是 Docker 容器中的静态目录

如果您想确定静态文件在 Docker 容器上的确切位置,您可以使用docker exec -t -i container_name /bin/bash它来探索其目录结构。

于 2016-05-17T18:42:30.853 回答
0

我真的希望您实际上不要将配置文件复制到图像中!

Docker 最佳实践

docker runDocker 镜像应该是不可变的,因此在部署时配置文件(依赖于很多 [环境] 变量)应该通过选项传递给容器/与容器共享-v|--volume

至于你的问题

如果您想在修改静态文件时查看任何更改,您需要docker build然后docker compose up 在每次修改时查看以实际更改网页。你可能不想要那个(很明显)。我建议您使用共享目录(通过-v选项)。

于 2016-03-31T13:04:01.887 回答