MAINTAINER fengqiangboy shenzhen RUN mkdir -p /usr/local/proxy-server COPY startup.sh /usr/local/proxy-server RUN cd /usr/local/proxy-server && \ chmod +x startup.sh WORKDIR /usr/local/proxy-server # 设置环境变量 USERNAME 默认值为 admin,后面可以通过docker run -e USERNAME="XXXXXX"修改,这个环境变量在容器里也可以$USERNAME获取 ENV USERNAME admin RUN echo 'USERNAME=' $USERNAME # 打印一下默认值 # 运行 startup.sh脚本,$USERNAME传递参数到脚本中,不能用 CMD []这种形式,这种方式读取不到变量 CMD sh startup.sh $USERNAME

2. startup.sh

#!/bin/bash
MODULE=$1  # 定义变量为上面传的 $USERNAME 第一个参数
echo 'MODULE=' ${MODULE} # 打印
 

如果想替换参数使用命令sed -i "s/<USERNAME>/$USERNAME/" config.properties,必须用双引号,用单引号不能读取变量

查看最终文件目录

[root@wanfei test-docker]# ls
Dockerfile  startup.sh

3. 制作镜像

[root@wanfei test-docker]# docker build -t www/test-docker .

4. 运行镜像

[root@wanfei test-docker]# docker run --name docker -e USERNAME="WANFEI" www/test-docker
MODULE= WANFEI
 

打印成功 WANFEI

使用参数-e [root@latform-2 ~]# docker run --rm -e MYALPINE=zhang alpine:latest printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=f40bfb0451e5 MYALPINE=zhang HOME=/root # --rm 停止后删除 # -e 传递环境变量,以key=value 问题由来: 今天去部署docker镜像的时候,发现有一个容器的环境变量一直不生效,导致异常 _mysql_exceptions.OperationalError: (1045, "Access denied for user…………) 整个代码中只有docker run的配置过数据库 于是经查:发现docker run -e 指定容器环境变量SQLALCHEMY_DATABASE_URI中存在一个特殊字符:"mysql: MAINTAINER fengqiangboy shenzhen <fengqiangboy@gmail.com> RUN mkdir -p /usr/local/proxy-server COPY startup.sh /usr/local/proxy-server RUN cd /usr/local/proxy-server && \ chmod +x startup.sh
Using environment variables in nginx configuration (new in 1.19) Out-of-the-box, nginx doesn't support environment variables inside most configuration blocks. But this image has a function, which will extract environment variables before nginx starts.
Docker 使用环境变量来传达相关信息,包括容器的守护选项,容器主机名,以及其他在容器中运行的实用信息。 docker run -rnv MY_ENVIRONMENT_VAR=“this is a test ” busybox:batest env # --env 或 -e ,可用于注入任何环境变量。 解决数据库和wordpress容器在同一个机器运行的问题。 docker c...
如果在执行 run 命令时没有指定 -a,那么 docker 默认会挂载所有标准数据流,包括输入输出和错误。你可以特别指定挂载哪个标准流。 只挂载标准输入输出只有-t参数可以输入命令,但是命令没有任何反应,和都无法退出,只能退出宿主机来强制退出只有-i参数可以输入命令,命令可以生效,但是祝你写一行命令,可以退出,但无法退出。 上述示例不会工作,因为默认是不允许容器访问宿主机设备的,需要访问设备是需要加上,如下所示 设置工作目录 会设置默认执行命令的目录,如果设置的这个目录在容器里面不