我有 Docker 容器,其命名卷在非 root 用户上运行,使用以下命令启动:
docker run -v backup:/backup someimage
Run Code Online (Sandbox Code Playgroud)
在图像中,有一个备份脚本尝试将文件保存在/backup目录中,但失败了。目录中安装的backup卷/backup属于 root 用户。
如何更改/backup目录的权限?
-----编辑1:
mcve如下:
使用 Gerrit 运行 docker 容器:
docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit
Run Code Online (Sandbox Code Playgroud)
现在在其他终端窗口上尝试在目录中保存一些内容/backup:
docker exec gerrit touch /backup/testfile
Run Code Online (Sandbox Code Playgroud)
你会得到:
touch: cannot touch '/backup/testfile': Permission denied
Run Code Online (Sandbox Code Playgroud) 我有一个带有 RUN 指令的 Dockerfile 来修改 /etc/hosts 文件,但它不起作用。
FROM dockerhub.mydomain.com/sometag/java8
MAINTAINER itsme
ADD some-java-app.jar app.jar
ADD hosts tmp/
ENV PATH=/opt/java/bin:$PATH
RUN cat /tmp/hosts >> /etc/hosts
CMD ["java",\
"-Djava.security.egd=file:/dev/./urandom",\
"-jar",\
"/app.jar"]
Run Code Online (Sandbox Code Playgroud)
在hosts复制到 docker 镜像中的 /tmp 的文件中,还有一个额外的主机名和 IP。我想cat这样做/tmp/hosts,/etc/hosts但在构建图像后/etc/hosts未修改。
如何正确修改此文件?编辑:我正在尝试使用tee命令,但是当图像是构建内容时,/tmp/hosts它会回显到控制台,而不是/etc/hosts.
RUN bash -c 'cat /tmp/hosts | tee -a /etc/hosts'
Run Code Online (Sandbox Code Playgroud)
它在 Dockerfile 中看起来|或>>不起作用。
我正在尝试查找 Kubernetes 集群上运行的哪个应用程序正在使用特定端口与 RabbitMQ 集群进行通信。在 RabbitMQ 上,我看到连接来自 192.168.1.10:34226。192.168.1.10是Kubernetes节点之一。登录到 192.168.1.10 后,我检查是否通过 tcpdump 命令从该节点建立了连接tcpdump -i eth0 port 34226。我看到两个方向的交通。现在我正在尝试查找哪个进程正在建立此连接。首先我尝试了 netstat:
netstat -tapn | grep 34226
结果什么也没发现。然后我尝试了 ss 但仍然一无所获。连接已建立,通过 tcpdump 我可以看到发送到 RabbitMQ 的心跳数据包以及来自 RabbitMQ 的响应。但 netstat 和 ss 不报告已建立的连接。
更新1
我发现这与网络命名空间有关。我的问题与this问题类似,但我需要找到从34226端口建立连接的进程的PID。