当前位置: 首页 > 知识库问答 >
问题:

如何定义docker容器中的env vars与我的jar文件一起使用[重复]

韩季
2023-03-14

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_usernamedatasource_password...是容器本身的env var

我的问题是在哪里定义/声明这个变量,我尝试将它包含在.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
DATASOURCE_USERNAME="aaa"
DATASOURCE_PASSWORD="bbb"
...

我的pb是我的java进程看不到这些变量,注意:我想明确地设置这些变量,而不是docker run-e

建议?

共有1个答案

蒋飞捷
2023-03-14

您有没有想过使用docker-compose.yml文件来创建一个容器堆栈?它也可以只包含一个容器,但您可以使用environment:树在其中添加环境变量。

然后,您需要安装docker-compse,而不是运行docker-compose,然后才能启动堆栈(即docker-compose.yml文件中的所有容器)。

然而,你的入口点如何工作仍然是至关重要的。如果它是一个二进制文件,它将在变量将出现的环境中运行。如果它是另一个shell脚本,那么输入脚本将需要导出该变量,以便使其可用于下一个子进程。

您还可以更改dockerfile的入口点,并在其前面添加var=key变量定义。它们将可用于子流程:

ENTRYPOINT variable1=value1 variable2=value2 myprocess.sh

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

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

显然,您想要从原始图像中查找的是其入口点的外观,以便您可以根据需要对其进行修改。

 类似资料:
  • 我编写docker文件是为了运行jar文件,而它并没有创建日志文件,请参阅下面的控制台是我的docker文件

  • 我有 3 个码头工人撰写文件。一个启动Kafka,另外两个是消费者和生产者。在 kafka 中添加了其他 docker 撰写文件中的external_links,但仍然无法从容器内部访问 kafka。从容器外部,我可以通过 localhost:9092 访问,但是在 docker 容器内部呢?

  • 我开始玩< code>std::ranges并想了解视图实际上是如何工作的。所以我尝试编写自己的容器和迭代器类型,并希望在视图中使用它。 但是似乎缺少了一些东西,但编译器只告诉我视图中没有方法,但没有说明原因。 例子: 使用编译 主要的cpp:90:16:error:“struct std::ranges::views::__adaptor::_RangeAdaptorClosurestd::ra

  • 是稳定的东西,应该存在于容器中,而不是我的主机目录中,但即使在装入后也需要保留。 既存在于容器中(因为需要它),也存在于主机目录中(因为我要编辑它)。我希望我的主机目录版本覆盖容器版本。 可能不存在于任何一个起始位置,而是在运行过程中生成的。我希望它一存在就保留在我的主机目录中。 (我猜是第4类,比如,我不在乎它是否存在) 在我的例子中,TF希望配置插件的和(我想用绑定挂载捕获的输出之一)都在同一

  • 我正在docker容器中设置一个应用程序。我希望这个应用程序能够与localstack堆栈容器localstack文档连接。当我运行时,容器会成功启动。我可以运行docker-compose文件中未包含的独立java应用程序,它将成功连接到localstack容器。但与localstack一起启动的应用程序无法连接。我看过docker文档和localstack文档,我想不出如何让这些东西彼此通信。

  • 问题内容: 我想这样做,以便我启动的Docker容器使用与我运行的主机相同的设置。有没有办法做到这一点? 我知道docker run 有一个选项,但这并不是我想要的,因为主机的文件在不同的机器上可能不同,所以用硬编码确切的IP /主机对我来说不是很好。 问题答案: 使用在泊坞窗运行命令。这告诉Docker使容器使用主机的网络堆栈。您可以在此处了解更多信息。