为了账号安全,请及时绑定邮箱和手机立即绑定

为运行 spring boot 独立应用程序的 docker 容器提供基于 XML 的配置

为运行 spring boot 独立应用程序的 docker 容器提供基于 XML 的配置

手掌心 2023-05-17 15:06:44
我想知道如何配置 docker setup (docker-compose) 以提供一个由我的 Spring boot 应用程序使用的配置文件。配置文件称为services.xml位于应用程序/lib/conf目录中的配置文件。该文件是使用默认配置部署的,但是我想要主机中的文件,以便每当我需要更改配置时,我应该在主机中进行编辑,容器将读取更新后的文件。docker-compose.ymlversion: '3.1'services:  my-app:    image: my-app    container_name: my-app    # restart: always    ports:      - 8443:8443    volumes:      - ./my-app/conf:/opt/lib/my-app/lib/conf:rw运行后的预期结果: docker-compose up我希望这应该创建目录,将容器中的默认 services.xml(连同 /opt/lib/my-app/lib/conf 中的所有其他文件)复制到该目录中,以便我可以编辑它。实际结果 运行 docker-compose 后,它会在 my-app 目录中创建一个空目录。my-app 无法读取 services.xml 文件并且应用程序无法启动(因为它依赖于此文件)。
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我希望这应该创建目录,将容器中的默认 services.xml(连同 /opt/lib/my-app/lib/conf 中的所有其他文件)复制到该目录中,以便我可以编辑它。

根据您上面所说,如果您的目标是让容器中的内容弹出到主机并让您有机会修改它们,那么我建议您使用命名卷。但是,host 中的文件夹将由 docker 自己管理,因此您需要找到它们所在的位置。

一个供您参考的最小示例:

docker-compose.yaml(在我的示例中,它位于文件夹中77):

version: '3'

services:

  frontend:

    image: alpine

    command: "tail -f /dev/null"

    volumes:

      - my_data:/etc


volumes:

  my_data:

启动服务:


shubuntu1@shubuntu1:~/77$ docker-compose up -d

Creating network "77_default" with the default driver

Creating volume "77_my_data" with default driver

Creating 77_frontend_1 ... done

检查命名卷在主机中的位置:


shubuntu1@shubuntu1:~/77$ docker ps

CONTAINER ID    IMAGE     COMMAND               CREATED             STATUS          PORTS     NAMES

6635aba545c9    alpine    "tail -f /dev/null"   14 minutes ago      Up 14 minutes             77_frontend_1

shubuntu1@shubuntu1:~/77$ docker inspect 77_frontend_1 | grep Source

            "Source": "/var/lib/docker/volumes/77_my_data/_data",

检查容器中原件的内容/etc/profile:


shubuntu1@shubuntu1:~/77$ docker exec 77_frontend_1 cat /etc/profile

export CHARSET=UTF-8

export.UTF-8

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

export PAGER=less

export PS1='\h:\w\$ '

umask 022


for script in /etc/profile.d/*.sh ; do

    if [ -r $script ] ; then

            . $script

    fi

done

从主机修改脚本:


shubuntu1@shubuntu1:~/77$ sudo -s -H

root@shubuntu1:/home/shubuntu1/77# cd /var/lib/docker/volumes/77_my_data/_data

root@shubuntu1:/var/lib/docker/volumes/77_my_data/_data# echo 'echo "hello"' >> profile

/etc/profile在我们对主机进行更改后再次检查in 容器:


shubuntu1@shubuntu1:~/77$ docker exec 77_frontend_1 cat /etc/profile

export CHARSET=UTF-8

export.UTF-8

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

export PAGER=less

export PS1='\h:\w\$ '

umask 022


for script in /etc/profile.d/*.sh ; do

    if [ -r $script ] ; then

            . $script

    fi

done

echo "hello"

我们可以看到echo "hello"我们在主机上添加的内容已经在容器中看到了。


查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信