docker - 有没有办法让 docker config 从容器内部编辑?
问题描述
我必须将应用程序的每个实例作为单独的 Docker 服务启动。基本映像相同,但每个实例的配置文件不同。现在,问题是我的应用程序对配置文件进行了一些更改。而且我希望配置更改保持不变,以便当我的应用程序重新启动(作为 docker 服务)时,它使用更新的配置。
我可以将配置文件用作挂载点,使用docker config
. 但问题是无论rwx
我给出什么模式(),我都无法从容器内部更新配置文件。挂载的配置始终是Read-only file system。
1. 如何从 docker 容器中更改配置文件?
2. 如何使更新的配置文件在容器外持久化,以便在服务重启时使用更新的配置?
我做了以下操作来将配置文件与图像/容器分离:
docker config create my-config config.txt
docker service create \
--name redis \
--config src=my-config,target=/config.txt,mode=0660 \
redis:alpine
docker container exec -ti <containerId> /bin/sh
配置文件安装在/config.txt
但我无法编辑它。
解决方案
配置将仅按设计读取。但是您可以将其复制到容器内的另一个文件中,作为映像中定义的入口点脚本的一部分。
docker config create my-config config.txt
docker service create \
--name redis \
--config src=my-config,target=/config.orig,mode=0660 \
username/redis:custom
入口点脚本将包括以下内容:
if [ ! -f /config.txt -a -f /config.orig ];
cp /config.orig /config.txt
fi
# skipping the typical exec command here since redis has its own entrypoint
# exec "$@" # run the CMD as pid 1
exec docker-entrypoint.sh "$@"
构建该映像的 Dockerfile 如下所示:
FROM redis:alpine
COPY /entrypoint.sh /
ENTRYPOINT [ "/entrypoint.sh" ]
你会用以下方式构建它:
docker build -t username/redis:custom .
推荐阅读
- javascript - Jasmine 测试错误:预期 Spy XYZ 已被调用
- opengl - OpenGL中glBindBufferBase()中的索引和几何着色器中的流号有什么关系?
- python - 如何在python中实现#ifdef,专门用于检查testrunner
- ios - 无效的可执行文件 - 可执行的 ProjectName WatchKit Extension' 不包含位码
- javascript - 每当我在反应中运行“npm start”时我得到错误:找不到模块'autoprefixer'
- google-sheets - Google表格中无限真实动态范围的平均值的ArrayFormula
- assembly - 在 NASM x86_64 中调用 sprintf 会导致分段错误
- excel - 使用 excel vba 计算每行中的重复值和报告重复数
- java - 运行junit测试时找不到lombok getter
- react-native - React Native 中的慢发布请求