我开始使用docker进行一些测试,以设置自己的服务器,但我遇到了一些问题。
我使用nginx-fpm
映像,该映像具有设置服务器所需的大多数服务。
这是我为设置基本服务器所做的Dockerfile
。我完美地构建了它,没有任何问题,并将其命名为nginx-custom-server
。
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
文件夹中,有一个简单的hello world php
。我想在本地计算机上更改代码,然后使用共享文件夹code
将其与docker容器同步。
nginx日志为空,所以我不知道出了什么问题。我在conf中设置了日志,但是nginx并未创建日志,所以我认为我认为一般的nginx conf存在问题。
这是我在打招呼世界中使用的conf。我也将此服务器名称映射到主机的主机中。
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;
}
EDIT:尝试访问Docker容器内的服务器时出错。
bash-4.4#wget localhost:80> /tmp/output.html --2019-03-27 12:33:11-- http://localhost/正在解析localhost ... 127.0.0.1,:: 1连接到localhost | 127.0.0.1 |:80 ...失败:连接被拒绝。连接到localhost | :: 1 |:80 ...失败:地址 无法使用。重试。
答案 0 :(得分:2)
据我所知,有两个原因导致您无法访问服务器。
第一个是您不将任何端口从容器转发到主机。您应该在-p 80:80
命令中加入docker run
参数。
第二个是您正在尝试侦听我假设是容器本身的IP的信息,它不是静态的(默认情况下)。在nginx配置中,应将listen 172.17.0.2:80;
替换为listen 0.0.0.0:80;
。
完成这两个修改后,您应该能够访问服务器。
另一种方法(但不推荐)是使用--network=host
参数启动容器。这样,主机的网络实际上可以从容器中看到。在这种情况下,您只需要将nginx配置设置为侦听有效地址即可。
但是,如果问题仍然存在,一种好的方法是在容器运行时运行docker exec -it {$container_id} bash
,并查看是否可以从容器本身内部访问服务器。这意味着服务器可以正常运行,但是由于其他原因,端口未正确转发到主机。