【发布时间】:2020-03-28 10:42:08
【问题描述】:
我正在尝试使用以下代码传递一个获取 IP 地址的变量:
${wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4}
我尝试设置一个入口点 shell 脚本,例如:
#!/bin/sh
export ECS_INSTANCE_IP_ADDRESS=$(wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4)
java -jar user-service-0.0.1-SNAPSHOT.jar
我的 dockerfile 看起来像:
#############
### build ###
#############
# base image
FROM maven:3.6.2-ibmjava-8-alpine as build
# set working directory
WORKDIR /app
# install and cache app dependencies
COPY . /app
RUN mvn clean package
############
### prod ###
############
# base image
FROM openjdk:8-alpine
# set working directory
WORKDIR /app
# copy entrypoint from the 'build environment'
COPY --from=build /app/entrypoint.sh /app/entrypoint.sh
# copy artifact build from the 'build environment'
COPY --from=build /app/target/user-service-0.0.1-SNAPSHOT.jar /app/user-service-0.0.1-SNAPSHOT.jar
# expose port 8081
EXPOSE 8081
# run entrypoint and set variables
ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]
我需要在回显 ECS_INSTANCE_IP_ADDRESS 时显示此变量,以便它可以由 $ECS_INSTANCE_IP_ADDRESS 的 .properties 文件加载。每当我进入容器的 /bin/sh 并回显变量时,它就会显示为空白。如果我在那个 shell 上进行导出,我会得到回显响应。
有什么想法吗?我已经尝试了很多东西,但无法让变量在容器上可用。
【问题讨论】:
-
您在
ENTRYPOINT中所做的任何事情都只会对该进程及其子进程可见(例如,您的java进程);在docker exec紧急调试 shell 中将无法访问它。这是正常行为,通常不是问题。 -
我相信它正在做它应该做的事情,尽管元数据 URL 是错误的。
标签: docker environment-variables docker-entrypoint