docker 怎样才能读取配置文件到镜像中?

2020-09-24 20:42:11 +08:00
 yestodayHadRain
发现用 docker-compose 部署项目的时候,一般都会指定一个配置文件。配置文件里可以自定义数据库名称 用户名 密码等信息。

docker-compose.yml 文件里的服务都是基于镜像的,当用 dockerFile 制作好镜像后 像用户名和密码等东西都已经写死了,一些 web 服务里的配置文件也会有 MySQL 的一些配置,是怎么实现根据用户自定义的配置文件去改动的呢?
2289 次点击
所在节点    问与答
12 条回复
ericwood067
2020-09-24 20:44:36 +08:00
docker run --env-file 配置文件名
foMM
2020-09-24 20:46:33 +08:00
env file 是环境变量,有些配置文件需要挂在文件叫 container 。用 volume 挂载
foMM
2020-09-24 20:47:59 +08:00
手机回复,打字有错别字,报歉。有些可以用 volume 把 container 里面的文件挂载在服务器本地方便修改
yestodayHadRain
2020-09-24 20:57:43 +08:00
@foMM 您的意思是先把容器启动了,然后再去改配置文件吗。
foMM
2020-09-24 22:25:27 +08:00
搜索了一下中文的相关内容,怎么这么多抄袭的……

Anyway,LZ 可以搜索关键字“详解 Docker 挂载本地目录及实现文件共享”,然后自己找一个你喜欢的平台看相关内容。我看了 7,8 篇,内容完全一样,也不知道谁抄的谁😥
yestodayHadRain
2020-09-25 08:54:48 +08:00
@foMM 好的,如果可以实现宿主机和 docker 容器共享配置文件的话还有一个问题

我的镜像里不是项目代码,而是 jar 包。java 项目打成 jar 包后还可以去修改配置文件吗?还是直接把配置文件写在容器环境变量中,Java 项目中的配置文件去读取环境变量? java 项目支持这样做吗?
yisany
2020-09-25 14:09:58 +08:00
@yestodayHadRain 这种的配置文件不应该都应该是单独的一个配置文件吗, 例如
java -jar xxx.jar -f config.yml
这样子的话, 容器内的 config.yml 可以用-v 命令挂载到宿主机的目录
想要修改直接修改宿主机的文件, 然后重启容器即可
容器内的结构:
xxx
---bin
---start.sh
---lib
---xxx.jar
---conf
---config.yml
---log
zunceng
2020-09-25 17:26:18 +08:00
docker swarm


echo " json or yaml balabalabala"| docker config create $config_name -



version: "3.3"

services:
service-a:
image: {{.REGISTRY}}/{{.SERVICE_NAME}}:{{.TAG}}
configs:
- source: external_config_a
target: /etc/external_config/a

configs:
external_config_a:
external: true
yestodayHadRain
2020-09-26 13:32:10 +08:00
@yisany 现在又遇到了新的问题, mysql 中如何获取环境变量呢?
yisany
2020-09-30 09:39:23 +08:00
@yestodayHadRain 不知道你描述的具体情况是什么样, 容器内部使用 env 命令不就可以获取所有的环境变量吗
yestodayHadRain
2020-10-01 03:12:46 +08:00
@yisany 是可以获取到环境变量,但是 mysql 容器里的初始化 sql 文件中要如何引用变量呢?
yestodayHadRain
2020-10-01 03:13:58 +08:00
@yisany 比如建表前需要 use 数据库名称,数据库名称在环境变量中要怎么引用呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/710231

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX