docker - 我应该如何在 Docker 的入口点使用环境变量?
问题描述
ENV ADDRESS=http://peer1:8761/eureka/,http://peer2:8762/eureka/
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar","/app.jar", "--eureka.client.serviceUrl.defaultZone=$ADDRESS"]
我想通过环境变量指定入口点的eureka地址。但是当我使用docker run时它仍然是$ADDRESS,并且我使用ENTRYPOINT java -jar xxxx
,它可以正确替换,但是当我使用ENTRYPOINT之类ENTRYPOINT java -jar xxx.jar
时,我使用docker run image_name --spring.profiles.active=peer1
,结束参数active= peer1不会生效,Entrypoint中使用环境变量和参数怎么办
解决方案
我刚刚尝试在 dockerfile 中解析 PATH 并且它适用于一种场景(虽然我使用了 CMD),但不确定这是否有帮助。如果这不起作用,请告诉我更多详细信息。
指定命令有两种形式(Exec 形式和 Shell 形式),以及在 dockerfile 中指定默认命令的两种方式(ENTRYPOINT 和 CMD)。
执行形式:
FROM ubuntu
MAINTAINER xyz<xyz.gmail.com>
ENTRYPOINT ["ping"]
指定的命令 (ping) 将作为 PID 1 运行。这就是为什么如果我们按 CTRL + C (SIGTERM) 将传递给 PID1 进程并关闭容器的原因。
外壳形式:
FROM ubuntu
MAINTAINER xyz<xyz.gmail.com>
CMD echo $PATH
PATH 在运行时解析为 shell 环境 PATH。(输出已验证)。
shell 形式指定用空格分隔的命令标记。shell 形式通过调用 /bin/sh -c 执行命令(这意味着 PID 1 实际上是 shell,docker 文件中指定的命令只是另一个进程)(按 CTRL + C 不会杀死容器)
使用 shell 形式的优点是因为您使用 /bin/sh -c 执行,我们可以在命令中解析环境变量(在上面的示例中,我们使用 PATH)。
希望这可以帮助
推荐阅读
- android-emulator - Big Sur 上北极狐的 Android 模拟器问题
- php - 安装要求时怎么可能出现以下错误?
- php - 无法在 html2pdf 中下载 pdf
- flutter - 如何在 Flutter 中使用嵌套(或多个)Future.builder?
- php - 为什么通过 PhpUnit 运行测试时找不到我的自定义 TestCase 类?
- r - 如何使用 Linux Debian 正确安装 R keras
- laravel - 即使在成功认证后,Laravel Sanctum 在实时服务器上的认证失败
- java - Java 无法打开 Optifine
- python - Flask 到 Django 的转换,flask.url_for,flask.request.url
- flutter - 如何将 woocommerce 集成到 Flutter 应用程序中