dev*_*bio 3 solr file-permissions docker docker-compose docker-volume
我的docker-compose.yml:
solr:
image: solr:8.6.2
container_name: myproject-solr
ports:
- "8983:8983"
volumes:
- ./data/solr:/var/solr/data
networks:
static-network:
ipv4_address: 172.20.1.42
Run Code Online (Sandbox Code Playgroud)
使用 启动 docker 后docker-compose up -d --build,solr 容器关闭,日志 ( docker logs myproject-solr) 显示:
Copying solr.xml
cp: cannot create regular file '/var/solr/data/solr.xml': Permission denied
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我在我的机器上授予数据目录的完全权限sudo chmod 777 ./data/solr/ -R并再次运行 Docker,一切都很好。
我猜当solr用户不是我的机器时会出现问题,因为 Dockerdata/solr使用root:root. ./data忽略我的文件夹 gitignored,我无法管理这些文件夹权限。
我想知道一种解决方法来正确管理权限以保留数据
小智 8
有docker-compose-only解决方案:)
Docker 以 root 权限挂载本地文件夹。
在 Solr 的 docker 映像中,默认用户是solr- 有充分的理由:Solr 命令应该使用此用户运行(您可以强制使用root但不建议运行它们)。
大多数 Solr 命令需要对/var/solr/, 进行数据和日志存储的写入权限。
在这种情况下,当您以用户身份运行 solr 命令时solr,您会被拒绝,因为您没有/var/solr/.
您可以做的是首先以 root 身份启动容器来更改/var/solr/. 然后切换到solr用户来运行所有必要的 solr 命令。您无法启动我们的 Solr 服务器。
在下面的示例中,我们使用solr-precreate创建默认核心并启动 solr。
version: '3.7'
services:
solr:
image: solr:8.5.2
volumes:
- ./mnt/solr:/var/solr
ports:
- 8983:8983
user: root # run as root to change the permissions of the solr folder
# Change permissions of the solr folder, create a default core and start solr as solr user
command: bash -c "
chown -R 8983:8983 /var/solr
&& runuser -u solr -- solr-precreate default-core"
Run Code Online (Sandbox Code Playgroud)
这是 docker-compose 的一个已知“问题”:由 Docker 引擎创建的所有文件都归 root:root 所有。通常它通过以下两种方式之一解决:
solr用户。的solr用户ID和组ID被Solr的图像内的硬编码:8983(Dockerfile.template)mkdir -p ./data/solr
sudo chown 8983:8983 ./data/solr
Run Code Online (Sandbox Code Playgroud)
version: "3"
services:
initializer:
image: alpine
container_name: solr-initializer
restart: "no"
entrypoint: |
/bin/sh -c "chown 8983:8983 /solr"
volumes:
- ./data/solr:/solr
solr:
depends_on:
- initializer
image: solr:8.6.2
container_name: myproject-solr
ports:
- "8983:8983"
volumes:
- ./data/solr:/var/solr/data
networks:
static-network:
ipv4_address: 172.20.1.42
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |