docker - 覆盖 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 容器中存在的文件?

最佳答案

您需要使用此镜像的 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/

相关文章:

docker - 修改和重建Docker镜像

windows - Windows 防火墙后的 Docker 安装错误

python - Airflow 变量的值在重新启动 docker 容器时变得无效

postgresql - 无法将主机名 "postgres"转换为地址 : Name or service not known

node.js - 如何从本地主机向我的 docker 容器发送 HTTP 请求?

使用 VSCode 开发容器的 Docker 设置中的 Docker : How to access running docker containers on the host machine

api - 使用 Docker API 创建容器时限制 CPU 使用率

python - 如何在Docker中运行两个python应用程序

docker - docker 在哪里存储卷数据?

docker - 删除所有 docker 镜像和容器