linux - 如何在 docker 容器中定义环境变量以与我的 jar 文件一起使用

标签 linux bash shell docker environment-variables

我有一个通过 jar 文件运行 java 进程的容器。 (基于springboot应用)

我的 jar 使用容器中的 en var,因此我的 application.yml 如下所示:

application.yml:

spring:
        profiles:
            active: server

        datasource:
            url: ${DATASOURCE_URL}
            databaseName: 
            serverName: 
            username: ${DATASOURCE_USERNAME}
            password: ${DATASOURCE_PASSWORD}
            dataSourceClassName: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
            registerMbeans: true
            maxPoolSize: ${DATASOURCE_MAXPOOLSIZE}
            cachePrepStmts: true
            prepStmtCacheSize: 250
            prepStmtCacheSqlLimit: 2048
            useServerPrepStmts: true
        data:
            couchbase:
                nodes: 
                    - ${COUCHBASE_NODE_1}
                    - ${COUCHBASE_NODE_2}
                bucket: ${COUCHBASE_BUCKET}
                password: ${COUCHBASE_PASSWORD}
                port: ${COUCHBASE_PORT}  

哪里,DATASOURCE_USERNAME , DATASOURCE_PASSWORD ...是容器本身的环境变量

我的问题是在哪里定义/声明变量,我尝试将其包含在 .bachrc 中,在文件中,如下所示:

.bachrc:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

########## CONFIGS FILES ############
source $HOME/envfile.list

envfile.list看起来像这样:

envfile.list:

DATASOURCE_USERNAME="aaa"
DATASOURCE_PASSWORD="bbb"
...

我的pb是我的java进程看不到那些变量, 注意:我想显式设置这些变量,而不使用 docker run -e

建议?

最佳答案

您是否考虑过使用docker-compose.yml文件来制作一堆容器?它也可以只包含一个容器,但您可以使用 environment: 树在其中添加环境变量。

然后,您不需要运行 docker run,而是需要安装 docker-compse,然后启动您的堆栈(意味着 docker-compose.yml 文件内的所有容器。

但是,入口点的工作方式仍然很重要。如果它是二进制文件,它将在变量所在的环境中运行。如果它是另一个 shell 脚本,则该入口脚本将需要导出该变量,以便使其可用于下一个子进程。

您还可以更改 dockerfile 的 ENTRYPOINT 并在其前面添加 VAR=KEY 变量定义。它们将可供子流程使用:

ENTRYPOINT variable1=value1 variable2=value2 myprocess.sh

如果您无法控制容器,您可以从原始镜像构建自己的镜像,只需更改入口点:

FROM other/image:latest
ENTRYPOINT variable1=value1 variable2=value2 myprocess.sh

显然,您想要从原始图像中查找的是其 ENTRYPOINT 的样子,以便您可以按照您需要的方式对其进行修改。

关于linux - 如何在 docker 容器中定义环境变量以与我的 jar 文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359238/

相关文章:

linux - 自动复制文件

bash - 将 awk 命令串在一起

bash - 如何 : Detect bash from shell script

linux - 在 Linux 主机上使用 winrm 通信器

linux - 命令中的点号是什么意思

bash - shell脚本中临时去掉ssh私钥密码

bash - 从 Bash 命令在文本文件中查找和替换

bash - 在 shell 脚本中使用 ssh 登录在服务器上创建 cron 条目

c# - 从 .net-core 工具中取消子进程

c++ - Linux 内核 2.4.20 和 2.4.36 中的 pthread_create 差异