docker - 基于 Docker 的 graylog 权限
问题描述
我有以下内容docker-compose.yml
(略有改动,但从此处复制):
version: '2'
services:
mongodb:
image: mongo:3
volumes:
- /storage/mongo_data:/data/db
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.1
volumes:
- /storage/es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
graylog:
image: graylog/graylog:3.0
volumes:
- /storage/graylog_journal:/usr/share/graylog/data/journal
environment:
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
links:
- mongodb:mongo
- elasticsearch
depends_on:
- mongodb
- elasticsearch
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_journal:
driver: local
问题是,当我使用它运行它时,docker-compose
它会失败,因为graylog
和elasticsearch
服务都无法分别访问/storage/graylog
和/storage/elasticsearch
。我需要改变的是:
chmod 1000:1000 -Rv /storage/elasticsearch
chmod 1100:1100 -Rv /storage/graylog
在主机上。
于是出现了两个问题:
- 这是为什么?
- 如何优雅地处理它?
解决方案
Elasticsearch 和 Graylog 都不会在其容器内以 root 身份运行。
这就是如果您将其挂载到容器中,他们的用户/组需要访问主机上的文件系统的原因。
推荐阅读
- javascript - Nest 无法解析 NodeMailerService (?, AppConfigService) 的依赖关系
- vim - 如何打开可修改的文件
- node.js - Docker 容器 npm 错误!内部监视失败:检测到循环符号链接
- php - 无法访问 PHP 对象数组中的数据
- reactjs - 如何使用 React 根据其 ID 显示博客文章?
- php - 语法错误,在 Laravel 8 中调用“all()”或“get()”时出现意外标记“::”
- javascript - 具有动态参数的 Ag-grid 单元格编辑器:使用全局变量
- reactjs - Next.JS 中的 Typescript 文件重命名后,Vercel 上的构建错误
- ajax - 提交后有没有办法让我的模式在 Laravel 中打开并将值保存到数据库?
- ruby-on-rails - Rails:覆盖模型中的关注方法