V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yestodayHadRain
V2EX  ›  问与答

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

  •  
  •   yestodayHadRain · 2020-09-24 20:42:11 +08:00 via iPhone · 2306 次点击
    这是一个创建于 1524 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现用 docker-compose 部署项目的时候,一般都会指定一个配置文件。配置文件里可以自定义数据库名称 用户名 密码等信息。

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

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

    我的镜像里不是项目代码,而是 jar 包。java 项目打成 jar 包后还可以去修改配置文件吗?还是直接把配置文件写在容器环境变量中,Java 项目中的配置文件去读取环境变量? java 项目支持这样做吗?
    yisany
        7
    yisany  
       2020-09-25 14:09:58 +08:00   ❤️ 1
    @yestodayHadRain 这种的配置文件不应该都应该是单独的一个配置文件吗, 例如
    java -jar xxx.jar -f config.yml
    这样子的话, 容器内的 config.yml 可以用-v 命令挂载到宿主机的目录
    想要修改直接修改宿主机的文件, 然后重启容器即可
    容器内的结构:
    xxx
    ---bin
    ---start.sh
    ---lib
    ---xxx.jar
    ---conf
    ---config.yml
    ---log
    zunceng
        8
    zunceng  
       2020-09-25 17:26:18 +08:00   ❤️ 1
    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
        9
    yestodayHadRain  
    OP
       2020-09-26 13:32:10 +08:00
    @yisany 现在又遇到了新的问题, mysql 中如何获取环境变量呢?
    yisany
        10
    yisany  
       2020-09-30 09:39:23 +08:00
    @yestodayHadRain 不知道你描述的具体情况是什么样, 容器内部使用 env 命令不就可以获取所有的环境变量吗
    yestodayHadRain
        11
    yestodayHadRain  
    OP
       2020-10-01 03:12:46 +08:00 via iPhone
    @yisany 是可以获取到环境变量,但是 mysql 容器里的初始化 sql 文件中要如何引用变量呢?
    yestodayHadRain
        12
    yestodayHadRain  
    OP
       2020-10-01 03:13:58 +08:00 via iPhone
    @yisany 比如建表前需要 use 数据库名称,数据库名称在环境变量中要怎么引用呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5174 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:43 · PVG 17:43 · LAX 01:43 · JFK 04:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.