为什么要为两个服务指定相同的音量?

问题描述 投票:0回答:1

这更多的是一个为什么?问题。我有以下

docker-compose.yml
文件。


services:
  nginx:
    image: nginx:1.25
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./app:/var/www/html
    depends_on:
      - php
    networks:
      - app-network

  php:
    image: php:8.3-fpm
    container_name: php
    volumes:
      - ./app:/var/www/html
    networks:
      - app-network

  mariadb:
    image: mariadb:11.3
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    ports:
      - "3306:3306"
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  dbdata: {}

我有以下 nginx 文件(上面的 default.conf)。

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

我的问题是针对

volumes:
php
nginx
上的
docker-compose.yml
。我想知道为什么我要为两个容器指定相同的卷,而不仅仅是 nginx?我的印象是 nginx 加载的任何文件都是通过
fastcgi_pass
地址位置通过 php 容器传递的。因此,只有 nginx 需要安装该卷。

php docker nginx docker-compose
1个回答
0
投票

假设您的项目如下所示:

├── app
│   ├── index.php
│   └── static.html
├── default.conf
└── docker-compose.yml

app/
中既有 PHP 源文件,也有静态 HTML 文件。

这是简化版

docker-compose.yml
:

services:
  nginx:
    image: nginx:1.25
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./app:/var/www/html
    depends_on:
      - php

  php:
    image: php:8.3-fpm
    container_name: php
    volumes:
      - ./app:/var/www/html

app/
目录需要在两个服务上进行卷安装。

php
服务可将
.php
文件转换为 HTML。因此,
.php
文件需要可供该服务使用。如果这里没有卷挂载,则 PHP-FPM 没有任何可处理的内容。

PHP-FPM 不处理静态文件,因此静态文件也需要直接卷挂载到

nginx
服务上。您可以删除 PHP-FPM 服务,静态文件仍然可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.