hugochinchilla / botanist
从项目目录中删除所有根目录
v0.2
2023-09-29 13:45 UTC
Requires
- php: >=7.0
- composer-plugin-api: ^2.0
- ext-posix: *
- symfony/filesystem: >=2.1
Requires (Dev)
- composer/composer: ^2.0
- phpunit/phpunit: ^10.4@dev
README
将此插件添加到您的 composer.json
,以防止在 Docker 上运行时 composer 创建由 root 拥有的文件。
composer require hugochinchilla/botanist
为什么是这个项目?
我非常喜欢的一点是,只需要在克隆后运行 docker compose up
就可以运行任何开发环境,无需进行任何设置,无需阅读 README 文件,对我来说这就是开发者的天堂。
将 Docker 配置为以不同于 root 的用户运行时,一个典型问题是需要在使用之前在 dotenv 文件中自定义用户 id,这让我感到不快。
它是如何工作的?
它设置了一个钩子,在可能写入 vendor/
目录或更新 composer.lock
文件的命令之后运行。钩子将检查父目录的所有者/组,并将相同的所有权设置到文件上。
它只能在 composer 以 root 身份运行时执行此操作,因此如果您不以 root 身份安装它,则直到您以 root 身份执行任何安装/更新操作之前,您将看不到所有权发生变化。
这比不以 root 身份运行 Docker 好吗?
不。最佳实践是不以 root 身份运行容器,但如果您无论如何都以此身份运行,这将解决一个常见问题。
替代方案是什么?
您可以使用 dotenv 文件和以下代码片段的组合
# .env
USER_ID=1000 # get yours running `id -u`
# docker-compose.yml
services:
php:
image: php:some-version
user: ${USER_ID:-1000}:${USER_ID:-1000}
...
这将使 Docker 容器以与您相同的用户运行。如果您没有在 dotenv 文件中定义 USER_ID,它将使用 1000 作为默认值,但有很大可能性这个 id 就是您的。
但如果您想创建一个任何用户都可以克隆并只需运行 docker compose up
而无需任何先前设置的仓库,请使用 botanist。