我有一个我想使用docker-compose和nginx部署的Web项目。
在当地,我:
docker-compose build
docker-compose push
如果我docker-compose up
,我可以访问localhost/
并重定向到我的index.html
。
现在我的ec2实例(我安装了docker和docker-compose的常规ec2实例)我docker-compose pull
,然后是docker-compose up。
所有容器都正确启动,我可以exec sh
进入我的nginx容器,看到有一个/facebook/index.html
文件。
[instance_ip]/index.html
,一切都会按预期进行。[instance_ip]/
,我会收到404响应
nginx收到请求(我在访问日志中看到它)但没有重定向到index.html
。为什么index
指令无法重定向到我的index.html
文件?
我试图:
但我得到的结果相同。
我正在使用docker-compose 1.11.1和docker 17.05.0。在ec2实例上它是docker 17.03.1并且我尝试了docker-compose 1.11.1和1.14.1(签名我有点绝望;))。
我的docker-compose文件中的摘录:
nginx:
image: [image from registry]
build:
context: ./
dockerfile: deploy/nginx.dockerfile
ports:
- "80:80"
depends_on:
- web
我的nginx图片从alpine开始,安装nginx,添加index.html文件并将我的conf文件复制到/etc/nginx/nginx.conf
。
这是我的nginx配置。我检查它是否存在于正在运行的容器上(本地和ec2上)。
# prevent from exiting when using `run` to launch container
daemon off;
worker_processes auto;
#
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
sendfile off;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
server {
error_log /var/log/nginx/file.log debug;
listen 80 default_server;
# root /home/domain.com;
# Bad developers use underscore in headers.
underscores_in_headers on;
# root should be out of location block
root /facebook;
location / {
index index.html;
# autoindex on;
try_files $uri @app;
}
location @app {
include uwsgi_params;
# Using docker-compose linking, the nginx docker-compose service depends on a 'web' service.
uwsgi_pass web:3033;
}
}
}
我不知道为什么容器在ec2实例上的行为不同。
任何指示赞赏!