“你好世界”与官方nginx和php docker图像,

5t7ly7z5  于 2023-02-15  发布在  PHP
关注(0)|答案(2)|浏览(116)

我想运行一些简单的index.php文件,使用官方的nginx和php docker映像。

  1. ubuntu版本是16.04.1 LTS(我的主机)
  2. Docker版本为1.12.6
    1.停靠-合成版本1.9.0
    我在主机上的本地目录如下所示:
\code
    index.php
docker-compose.yml
nginx.conf

index.php包含一些简单的代码:

<?php
    echo phpinfo();
?>

docker-compose. yml包含以下指令(版本1):

web:
    image: nginx:latest
    ports:
        - "8181:80"
    volumes:
        - ./code:/code
        - ./nginx.conf:/etc/nginx/nginx.conf
    links:
        - php

php:
    image: php:7-fpm
    volumes:
        ./code:/code

nginx. conf包含以下指令(版本1):

worker_processes 1
events { worker_connections 1024; }
http {
    sendfile on;
    server {
        listen 80;
        index index.php index.html;
        root /code;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }

    }
}

在所有这些情况下,我运行命令:

docker-compose up --force-recreate

我在控制台中看到两个映像都已创建,但是,当我转到localhost:8181时,我收到一条错误消息。
页面没有找到(2:无此类文件或目录),客户端:www.example.com,服务器:,请求:172.17.0.1"本地主机:8181" "GET / HTTP/1.1", host: "localhost:8181"
我真的很想知道,为什么它在/etc/nginx/html/文件夹中搜索,并忽略nginx. conf文件中的root /code;指令。尽管如此,我编辑了docker-compose. yml,使它现在看起来像这样:

web:
    image: nginx:latest
    ports:
        - "8181:80"
    volumes:
        - ./code:/etc/nginx/html
        - ./nginx.conf:/etc/nginx/nginx.conf
    links:
        - php

php:
    image: php:7-fpm
    volumes:
        ./code:/code

如您所见,我只更改了web/volumes下的一条指令:

./code:/code -> ./code:/etc/nginx/html

现在,当我重新运行docker-compose up --force-recreate并转到localhost:8181时,我看到另一条错误消息:
FastCGI在标准错误中发送:从上游读取响应标头时出现"主脚本未知",客户端:www.example.com,服务器:,请求:172.17.0.1"快速目录名称://172. 17. 0. 2:9000",主机:"本地主机:8181" "fastcgi://172.17.0.2:9000", host: "localhost:8181"
现在我不知道这一切意味着什么。在那之后我尝试了许多不同的指令组合在nginx. conf,但它每一次我结束了与完全相同的错误信息失败。所以,我的问题是我如何才能使它工作?如何docker-compose. yml和nginx. conf应该看起来像在ordrr能够运行世界上最简单的脚本?

svmlkihl

svmlkihl1#

你的php容器卷定义中缺少"-"。

php:
    image: php:7-fpm
    volumes:
        ./code:/code

应为:

php:
    image: php:7-fpm
    volumes:
        - ./code:/code

我自己测试了一下,经过修正后,它工作得很好:

Starting test_php_1
Starting test_web_1
Attaching to test_php_1, test_web_1
php_1  | [19-Jan-2017 14:41:09] NOTICE: fpm is running, pid 1
php_1  | [19-Jan-2017 14:41:09] NOTICE: ready to handle connections
web_1  | 172.17.0.1 - - [19/Jan/2017:14:41:39 +0000] "GET / HTTP/1.1" 200 82883 "-" "curl/7.35.0"
php_1  | 172.17.0.3 -  19/Jan/2017:14:41:39 +0000 "GET /index.php" 200
ygya80vv

ygya80vv2#

如果您想在没有停靠合成的情况下执行此操作,也可以:要用你的/code文件夹作为web根目录启动docker php容器,你可以使用以下命令:

docker run -p 8181:80 -d --name php -v '/code':'/app' webdevops/php-nginx

或者从当前目录(计算机上的任何位置)执行此操作:

docker run -p 8181:80 -d --name php -v $(pwd):'/app' webdevops/php-nginx

相关问题