php-fpm と Nginx Docker コンテナを正しくリンクするにはどうすればいいですか? 質問する

php-fpm と Nginx Docker コンテナを正しくリンクするにはどうすればいいですか? 質問する

2 つの別々のコンテナをリンクしようとしています:

問題は、phpスクリプトが動作しないことです。おそらくphp-fpmの設定が間違っているのでしょう。ここにソースコードがあります。リポジトリ. ファイルはこちらですdocker-compose.yml:

nginx:
    build: .
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./:/var/www/test/
    links:
        - fpm
fpm:
    image: php:fpm
    ports:
        - "9000:9000"

そして、Dockerfilenginx のイメージに基づいてカスタム イメージを構築するために使用しました。

FROM nginx

# Change Nginx config here...
RUN rm /etc/nginx/conf.d/default.conf
ADD ./default.conf /etc/nginx/conf.d/

最後に、カスタム Nginx 仮想ホスト構成を次に示します。

server {
    listen  80;

    server_name localhost;
    root /var/www/test;

    error_log /var/log/nginx/localhost.error.log;
    access_log /var/log/nginx/localhost.access.log;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/.+\.php(/|$) {
        fastcgi_pass 192.168.59.103:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

これらのコンテナを正しく構成して PHP スクリプトを実行するのを手伝ってくれる人はいますか?

追伸私は次のようにdocker-composer経由でコンテナを実行します。

docker-compose up

プロジェクトのルートディレクトリから。

ベストアンサー1

少し古い投稿であることは承知していますが、私も同じ問題を抱えており、あなたのコードがなぜ機能しないのか理解できませんでした。何度もテストした結果、原因が分かりました。

server.rootfpm は nginx から完全なパスを受け取り、fpm コンテナ内のファイルを見つけようとするようです。そのため、 nginx コンテナ内に存在しない場合でも、nginx 構成とまったく同じである必要があります。

実証するには:

ドッカー

nginx:
    build: .
    ports:
        - "80:80"
    links:
        - fpm
fpm:
    image: php:fpm
    ports:
        - ":9000"

    # seems like fpm receives the full path from nginx
    # and tries to find the files in this dock, so it must
    # be the same as nginx.root
    volumes:
        - ./:/complex/path/to/files/

デフォルト

server {
    listen  80;

    # this path MUST be exactly as docker-compose.fpm.volumes,
    # even if it doesn't exist in this dock.
    root /complex/path/to/files;

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

    location ~ ^/.+\.php(/|$) {
        fastcgi_pass fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Dockerファイル

FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/

おすすめ記事