docker - 覆盖 Docker 容器中的文件
问题描述
我在 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 容器中存在的文件?
解决方案
您需要使用此映像的本机设置系统,或对其进行大量修补。
该镜像有一个Docker Hub 页面(通常,https://hub.docker.com/r/owner/image
用于非库镜像)。该链接指向其 Docker 打包源的 Bitbucket 存储库。主容器进程是一个无条件执行的entrypoint.py
脚本:
gen_cfg('server.xml.j2', f'{JIRA_INSTALL_DIR}/conf/server.xml')
该gen_cfg
函数将通过从引用的 Jinja2 源文件中呈现它来覆盖命名的输出文件。
Docker Hub 页面列出了大量的环境变量设置。如果您设置了这些,容器将为您生成自己的server.xml
文件。如果你能弄清楚到底注入了什么,你也可以使用绑定挂载来覆盖server.xml.j2
源文件。
(一般来说,在启动时绑定挂载总是将内容推送到容器中,并且从不从镜像中提取内容。这个镜像在生成自己的配置时有点不寻常,这就是主机文件被覆盖的原因;这不是自然发生的事情与 Docker。)
推荐阅读
- docker - docker-compose 中的 Yarn 命令找不到 && 命令
- python - 使用 CSV 文件进行回归
- python - 基于另一列为所有行分配随机值
- sharepoint - 在 Power Automate 中对 Sharepoint 列表列进行分组
- css - Bootsrap.css 未加载到使用 PuppeteerSharp 生成的 pdf 中
- html - 为什么按钮边框没有显示我设置的颜色?
- excel - 使用模块级私有变量和子变量而不是使用 VBA for Excel 中的函数传递变量是否会影响性能?
- input - 如何在 Mac OS 中的不同进程或应用程序之间同步鼠标和键盘操作?
- java - 检查编辑框是否为空
- robotframework - 机器人框架 Telnet 库不打开终端