docker - 如何使用 docker-compose 在具有正确读/写权限的绑定挂载 /godata 的 docker 中运行 gocd/server 容器?
问题描述
我正在尝试使用 docker-compose 运行 gocd 服务器,其持久数据目录位于/godata
我的主机上,但 gocd 无法写入此目录中的文件,即使我已授予用户“go”的读/写权限'。
这是我的docker-compose.yml
gocd:
image: gocd/gocd-server:v19.7.0
container_name: gocd
ports:
- "8153:8153"
- "8154:8154"
volumes:
- type: bind
target: /godata
source: /godata
文档说要确保用户“go”具有绑定挂载或 uid 1000 的适当权限。
这是“go”用户的权限打印:
drwxr-xr-x 2 go go 4096 Jul 8 18:26 addons
drwxr-xr-x 3 go go 4096 Jul 19 18:53 artifacts
drwxr-xr-x 2 go go 4096 Jul 10 21:22 config
drwxr-xr-x 6 go go 4096 Jul 8 18:27 db
drwxr-xr-x 2 go go 4096 Jul 22 19:38 logs
drwxr-xr-x 4 go go 4096 Jul 8 18:27 plugins
还尝试使用chmod 1000:go /godata
.
运行时我仍然收到写权限错误docker-compose up
:
gocd | jvm 1 | 14:40:05,993 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[PerformanceFileAppender] - Active log file name: logs/go-server-perf.log
gocd | jvm 1 | 14:40:05,993 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[PerformanceFileAppender] - File property is set to [logs/go-server-perf.log]
gocd | jvm 1 | 14:40:05,993 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[PerformanceFileAppender] - openFile(logs/go-server-perf.log,true) call failed. java.io.FileNotFoundException: logs/go-server-perf.log (Permission denied)
gocd | jvm 1 | at java.io.FileNotFoundException: logs/go-server-perf.log (Permission denied)
gocd | jvm 1 | at at java.base/java.io.FileOutputStream.open0(Native Method)
gocd | jvm 1 | at at java.base/java.io.FileOutputStream.open(Unknown Source)
gocd | jvm 1 | at at java.base/java.io.FileOutputStream.<init>(Unknown Source)
gocd | jvm 1 | at at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
gocd | jvm 1 | at at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:204)
gocd | jvm 1 | at at ch.qos.logback.core.FileAppender.start(FileAppender.java:127)
gocd | jvm 1 | at at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
gocd | jvm 1 | at at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
gocd | jvm 1 | at at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
gocd | jvm 1 | at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
gocd | jvm 1 | at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
gocd | jvm 1 | at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
gocd | jvm 1 | at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
gocd | jvm 1 | at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
gocd | jvm 1 | at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
gocd | jvm 1 | at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
gocd | jvm 1 | at at com.thoughtworks.go.logging.LogConfigurator.configureWith(LogConfigurator.java:122)
gocd | jvm 1 | at at com.thoughtworks.go.logging.LogConfigurator.initialize(LogConfigurator.java:91)
gocd | jvm 1 | at at com.thoughtworks.go.server.util.GoLauncher.main(GoLauncher.java:40)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
gocd | jvm 1 | at at java.base/java.lang.reflect.Method.invoke(Unknown Source)
gocd | jvm 1 | at at com.thoughtworks.gocd.Boot.run(Boot.java:89)
gocd | jvm 1 | at at com.thoughtworks.gocd.Boot.main(Boot.java:55)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
gocd | jvm 1 | at at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
gocd | jvm 1 | at at java.base/java.lang.reflect.Method.invoke(Unknown Source)
gocd | jvm 1 | at at org.tanukisoftware.wrapper.WrapperJarApp.run(WrapperJarApp.java:451)
gocd | jvm 1 | at at java.base/java.lang.Thread.run(Unknown Source)
解决方案
推荐阅读
- r - 所有列组合的唯一 ID
- r - 如何使用空行将 r 中的数据集分解为新数据集
- javascript - 为什么我们需要 create-react-app 的 --scripts-version 命令行选项?
- javascript - 使用 Javascript 访问隐藏字段时出现错误“无法获取未定义或空引用的属性值”
- javascript - 将按钮链接到工作表中的特定单元格
- c# - 如何获取纹理上像素的世界空间坐标?
- html - 导出 Kepler.gl 地图时禁用侧面板?
- ios - 不了解 Apple Watch 伴侣应用程序是如何安装的
- codeblocks - 用于代码块的 Fortran77 编译器(win10 64 位)?
- python - 无法从网页中抓取一条静态信息