首页 > 解决方案 > 如何使用 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)

标签: dockerdocker-composego-cd

解决方案


推荐阅读