使用docker配置nginx时出现问题
为了建立自己的服务器,我开始使用docker做一个小测试,我遇到了一些问题 我使用的是使用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
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
文件夹中,我有一个简单的helloworldphp
。我希望在本地计算机上更改代码,并使用共享文件夹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的任何答案。我更新了该问题,但它也给了我一个连接拒绝错误。