覆盖Docker容器中的文件

时间:2020-07-10 16:26:21

标签: 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被jira8 docker容器中/opt/atlassian/jira/conf/server.xml中的文件覆盖。

在容器启动后,我可以手动将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容器中存在的文件?

1 个答案:

答案 0 :(得分:1)

您将需要使用该映像的本机设置系统,或者对其进行大量修补。

该图像具有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文件。如果您可以弄清楚到底要注入什么,则还可以使用绑定安装来覆盖server.xml.j2源文件。

(通常,绑定文件在启动时总是将内容推送到容器中,并且永远不会从映像中提取内容。此映像在生成自己的配置时有点不寻常,这就是为什么主机文件被覆盖的原因;这不是什么Docker自然会发生这种情况。)