gpt4 book ai didi

linux - Docker:安装/共享单个 sock 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:04 30 4
gpt4 key购买 nike

我想在 nginx 和 PHP 之间共享 php-fpm.sock。我现在的做法是这样的:

services:
nginx:
build:
context: .
dockerfile: docker/nginx.docker
ports:
- '8080:80'
volumes:
- type: volume
source: php_fpm_sock
target: /mnt/sock
consistency: delegated
read_only: true
volume:
nocopy: true
links:
- php
php:
build:
context: .
dockerfile: docker/php.docker
links:
- mariadb
env_file: .env
volumes:
- type: volume
source: php_fpm_sock
target: /mnt/sock
consistency: delegated
read_only: false
volume:
nocopy: true
volumes:
php_fpm_sock:

即我已将 sock 文件从其通常位置 (/var/run/php5-fpm.sock) 移动到 /mnt/sock,因为我不知道如何挂载单个文件,而且我不想挂载整个 /var/run 目录。

其次,我将 php-fpm 配置为:

[www]
listen = /mnt/sock/php-fpm
;listen.owner = www-data
;listen.group = nginx
; php-fpm runs as `www-data`, nginx runs as `nginx`
listen.mode = 0664

即,我已授予“其他”完全读取权限,因为 php-fpm 容器中不存在 nginx 用户组,因此我不知道如何才能仅向 nginx 授予权限。

这一切都感觉很老套。所以我的问题是:

  1. 如何在这两个容器之间共享 sock 文件,以便可以将 sock 文件移回 /var/run/php5-fpm.sock
  2. 如何修复此文件的读取权限,以便只有 nginx 可以读取它?即如何跨容器共享 Linux 用户帐户?
<小时/>

我还可以将 nginx 用户添加到 php-fpm 镜像中,

RUN useradd -r -s /usr/sbin/nologin -c "Nginx service" -U nginx -u 101

然后然后我可以正确设置权限。两个图像之间的 UID 必须匹配,否则它将无法工作,因此我已明确设置它。如果 101 已经用于 PHP,我想我会再次遇到麻烦,所以我也不喜欢这个解决方案。

最佳答案

你必须按照你展示的方式去做。 (但是将卷安装在 PHP 容器的 /var/run 上可能没问题。)

这里有三大限制:

  1. 装载将一些外部内容装载到容器中(启动后可以双向写入),而不是发布内容。
  2. Docker 在主容器进程启动之前将卷装载到容器中,因此您要装载的任何内容都必须已经存在。
  3. Compose 依赖机制本质上强制执行容器的创建顺序,但它不会等待容器进程实际启动。

因此,根据第二个约束,您无法将 PHP-FPM 套接字挂载到 PHP 容器中,因为当您运行 docker-compose up 时它还不存在。根据第三个约束,您也无法将套接字挂载到 nginx 容器中,因为不能保证它在创建容器时就存在。 (You can't mount single files out of named volumes 也可以,但理论上您可以通过绑定(bind)挂载主机目录来解决此问题。)

由于容器仅运行一个进程,因此 /var/run 中可能没有其他内容,并且就其本质而言,无论如何都可以用空卷隐藏其中的所有内容。您可能需要手动管理的唯一内容是 pid 文件。

How can I fix the read permissions on this file so that only nginx can read it? i.e. how can share linux user accounts across containers?

您需要手动确保两个容器使用的USER具有相同的数字用户ID。请注意,以 root 身份运行容器是很常见的(如果不鼓励的话),这无论如何都会绕过这里的任何控制。没有内置方法可以执行此操作。

关于linux - Docker:安装/共享单个 sock 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855224/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com