我在 docker 容器中运行 jira8:
jira8:
container_name: jira8
expose:
- "8080"
image: atlassian/jira-software:8.10
networks:
atlassian-network:
aliases:
- jira8
ports:
- "8081:8080"
restart: always
volumes:
- /Users/mles/git/jira-migration/config-files/server-localhost-8.10.xml:/opt/atlassian/jira/conf/server.xml
每次我重新启动 docker 容器时,文件 /Users/mles/git/jira-migration/config-files/server-localhost-8.10.xml
被 /opt/atlassian/jira/conf/server.xml
中存在的文件覆盖在 jira8 docker 容器中。我可以 - 在容器启动后 - 复制
server-localhost-8.10.xml
手动进入 docker 容器,覆盖默认 server.xml
.我尝试安装只读(
:ro
) volumes:
- /Users/mles/git/jira-migration/config-files/server-localhost-8.10.xml:/opt/atlassian/jira/conf/server.xml:ro
但我在主机上的文件仍然被覆盖。有一个更好的方法吗?前任使挂载的文件只读并始终覆盖 docker 容器中存在的文件?
最佳答案
您需要使用此镜像的 native 设置系统,或对其进行大量修补。
图片有 Docker Hub page (一般来说,https://hub.docker.com/r/owner/image
用于非图书馆图像)。链接到 a Bitbucket repo为其 Docker 打包源。主容器进程是an entrypoint.py
script无条件地这样做:
gen_cfg('server.xml.j2', f'{JIRA_INSTALL_DIR}/conf/server.xml')
在哪里 gen_cfg
function将通过从引用的 Jinja2 源文件呈现命名的输出文件来覆盖它。Docker Hub 页面列出了大量的环境变量设置。如果您设置这些,容器将生成自己的
server.xml
文件给你。如果你能弄清楚到底注入(inject)了什么,你也可以使用绑定(bind)挂载来覆盖 server.xml.j2
。源文件。(通常,在启动时绑定(bind)挂载总是将内容推送到容器中,并且从不从镜像中提取内容。这个镜像在生成自己的配置时有点不寻常,这就是主机文件被覆盖的原因;这不是自然发生的事情与 Docker。)
关于docker - 覆盖 Docker 容器中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838513/