在使用 Docker 进行应用部署时,经常需要通过环境变量进行应用配置。但有时候我们发现在容器内部读取的环境变量值始终为默认值,无法生效。这是由于 Docker 在创建容器时会继承宿主机的环境变量,如果不特殊处理,则容器内部无法读取到我们设置的环境变量值。本文将介绍解决 Docker 容器环境变量无效的问题的方法。
解决方法
解决 Docker 容器环境变量无效的问题主要有两种方法:
方法一:使用 Dockerfile
在 Dockerfile 中指定环境变量可以有效解决容器内部读取环境变量无效的问题,具体步骤如下:
在 Dockerfile 中使用
ENV
关键字指定环境变量,并指定变量值,例如:ENV NODE_ENV=production ENV PORT=3000
注意:在 Dockerfile 中指定的环境变量会被所有容器实例共享。
创建 Docker 镜像,例如:
docker build -t my-app:latest .
创建容器实例时,我们不需要使用
-e
参数指定变量名和变量值,Docker 会自动读取 Dockerfile 中定义的环境变量,例如:docker run -p 3000:3000 my-app:latest
方法二:使用 docker-compose
使用 docker-compose 可以方便地管理多个容器实例,同时也可以解决容器内部读取环境变量无效的问题,具体步骤如下:
在 docker-compose.yml 文件中使用
environment
关键字指定环境变量,并指定变量值,例如:-- -------------------- ---- ------- -------- --- --------- ---- ------ ------------- ------ - --------- ------------ - ------------------- - ---------
注意:在 docker-compose.yml 文件中指定的环境变量只会被该容器实例使用,不会被其他容器实例共享。
创建容器实例,只需要执行以下命令即可:
docker-compose up -d
示例代码
一个使用 docker-compose 的示例代码如下:
-- -------------------- ---- ------- -------- --- --------- ---- ------ ------------- ------ - --------- ------------ - ------------------- - --------- -------- - --------------
其中,volumes
关键字指定将容器内部的 /app/src
映射到宿主机上的 ./src
目录,实现代码动态修改。
总结
本文介绍了解决 Docker 容器环境变量无效的问题的方法,即在 Dockerfile 中指定环境变量或者在 docker-compose.yml 文件中指定环境变量。通过本文的介绍,希望读者能够更好地理解 Docker 的应用场景,并能更加方便地在实际应用中应用 Docker。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64817a2648841e98940f3cf2