我有一个在 Azure 应用服务中运行的 Docker 容器。在我的 Azure 应用服务配置部分中,我有一个用于数据库连接的定义变量的列表。我想在 wp-config.php 文件中的 docker 容器中使用它们来连接到 Azure MySQL 数据库。但是,这些变量在容器中根本不可用。
在我的启动脚本中添加以下行后,我尝试使用“env”或“printenv”命令查看它们:
eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)
不幸的是,没有成功。我也尝试通过 PHP 使用 getenv('variable_name') 函数获取它们,也没有成功。我的所有环境变量都在 Kudu 容器中可用,该容器是与在应用程序服务中运行我的应用程序的实际容器一起创建的,但是,我根本无法在我的应用程序容器中使用它们。容器本身是 Apache + WordPress 镜像,我在下面附加了我的 Dockerfile 和启动脚本:
Dockerfile:
FROM wordpress:4.9.1-apache
RUN apt-get update
RUN apt-get -y install openssh-server \
&& echo "root:Docker!" | chpasswd
COPY sshd_config /etc/ssh/
RUN mkdir -p /tmp
COPY ssh_setup.sh /tmp
RUN chmod +x /tmp/ssh_setup.sh \
&& (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null)
COPY . /var/www/html
RUN chown -R www-data:www-data /var/www/html/
ENV PORT 80
EXPOSE 80 2222
ADD start.sh /
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
开始.sh:
#!/bin/bash
/usr/sbin/sshd
apache2-foreground
eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)
最佳答案
UPD:该问题是由于启用持久存储的应用设置造成的。一旦我将值从“true”更改为“false”,出于某种原因,应用程序设置就开始充当环境变量。
关于Azure 应用服务环境变量在容器中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73634150/