gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:31:55 25 4
gpt4 key购买 nike

我想知道如何配置 docker 设置 (docker-compose) 以提供由我的 Spring boot 应用程序使用的配置文件。

配置文件名为 services.xml,位于应用程序的 /lib/conf 目录中。该文件是使用默认配置部署的,但是我希望该文件位于主机中,以便每当我需要更改配置时,我应该在主机中进行编辑,容器将读取更新后的文件。

docker-compose.yml

version: '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 文件,并且应用程序无法启动(因为它依赖于此文件)。

最佳答案

I expect this should create the directory, copy the default services.xml (along with all other files in /opt/lib/my-app/lib/conf) in container into this directory to make it available for me to edit.

根据您上面所说,如果您的目的是让容器中的内容弹出到主机并让您有机会修改它们,那么我建议您使用 named volumes 。但是,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 LANG=C.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:

shubuntu1@shubuntu1:~/77$ docker exec 77_frontend_1 cat /etc/profile
export CHARSET=UTF-8
export LANG=C.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”已经在容器中看到了。

关于java - Docker-compose - 为运行 spring boot 独立应用程序的 docker 容器提供基于 XML 的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57349535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com