使用docker配置nginx时出现问题

使用docker配置nginx时出现问题,docker,nginx,Docker,Nginx,为了建立自己的服务器,我开始使用docker做一个小测试,我遇到了一些问题 我使用的是nginx fpm映像,它提供了设置服务器所需的大部分服务 这是我的Dockerfile我是为了设置一个基本服务器而做的。我完美地构建了它,没有任何问题,并将其命名为nginx定制服务器 Dockerfile FROM "richarvey/nginx-php-fpm" ADD /conf/simple-project.conf /etc/nginx/sites-available/simple-projec

为了建立自己的服务器,我开始使用docker做一个小测试,我遇到了一些问题

我使用的是
nginx fpm
映像,它提供了设置服务器所需的大部分服务

这是我的
Dockerfile
我是为了设置一个基本服务器而做的。我完美地构建了它,没有任何问题,并将其命名为
nginx定制服务器

Dockerfile

FROM "richarvey/nginx-php-fpm"

ADD /conf/simple-project.conf /etc/nginx/sites-available/simple-project.conf

RUN mkdir /srv/www/
RUN mkdir /LOGS/
RUN ln -s /etc/nginx/sites-available/simple-project.conf /etc/nginx/sites-enabled/simple-project.conf
RUN rm /etc/nginx/sites-enabled/default.conf

CMD ["/start.sh"]
我通过终端使用以下命令运行它

docker run --name=server-stack -v /home/ismael/Documentos/docker-nginx/code:/srv/www -v /home/ismael/Documentos/docker-nginx/logs:/LOGS -p 80:80 -d nginx-custom-server:stack
/srv/www
文件夹中,我有一个简单的helloworld
php
。我希望在本地计算机上更改代码,并使用共享文件夹
code
将其与docker容器同步

nginx日志是空的,所以我不知道出了什么问题。我在我的conf中设置了日志,但是nginx没有创建日志,所以我想一般的nginx conf可能有问题

这是我在hello world中使用的配置。我还将此服务器名称映射到主机的主机中

simple project.conf

server {
    listen 0.0.0.0:80;
    server_name simple-project.olive.com;
    root /srv/www/simple-project/;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        # the ubuntu default
        fastcgi_pass   /var/run/php-fpm.sock:9000;

        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param APPLICATION_ENV int;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /LOGS/custom_error.log;
    access_log /LOGS/custom_access.log;
}
编辑:尝试访问docker容器内的服务器时出错

bash-4.4#wget localhost:80>/tmp/output.html --2019-03-27 12:33:11--解析本地主机。。。127.0.0.1,::1连接到本地主机| 127.0.0.1 |:80。。。失败:连接被拒绝。正在连接到本地主机|:::1 |:80。。。失败:地址 无法使用的。重试


据我所知,您无法访问服务器的原因有两个

首先,您不将任何端口从容器转发到主机。您应该在
docker run
命令中包含
-p80:80
参数

第二个问题是,您正在尝试侦听我假定的容器本身的IP,它不是静态的(默认情况下)。在nginx配置中,您应该替换
listen172.17.0.2:80
一起收听0.0.0.0:80

通过这两个修改,您应该能够访问服务器

另一种方法(但不推荐)是使用
--network=host
参数在中启动容器。这样,主机的网络实际上可以从容器中看到。在这种情况下,您只需要设置nginx配置来侦听有效地址


但是,如果问题仍然存在,一个好的方法是在容器运行时运行
docker exec-it{$container_id}bash
,查看是否可以从容器本身内部访问服务器。这意味着服务器运行正常,但由于其他原因,端口未正确转发到主机。

非常感谢您的帮助,但我遇到了一个新问题。我提前更新了答案,非常感谢。当您在本地主机上的另一个服务监听端口80时,通常会发生此错误。这可能会引用到另一个在80上侦听的nginx服务器?找到答案的一种方法是运行sudonetstat-tlnp | grep80(在unix上),看看谁是罪魁祸首。我按照您在回答中所说的进行了设置,但我仍然无法访问服务器。我在容器里想弄清楚到底发生了什么。我尝试了这个
wget 172.17.0.2:80>/tmp/output.html
,但是我从容器内部被拒绝了连接。您是否尝试过从容器内部运行
wget localhost:80
?由于服务器位于0.0.0.0上,您肯定不会从容器中收到来自172.17.0.2的任何答案。我更新了该问题,但它也给了我一个连接拒绝错误。