【问题标题】:How to hide Mysql password in a docker-compose using env_file如何使用 env_file 在 docker-compose 中隐藏 Mysql 密码
【发布时间】:2020-04-18 09:17:18
【问题描述】:
version: '3'

services:
  db:
    image: "mysql:5.7"
    volumes:
      - data-mysql:/var/lib/mysql

    ports:
      - '3306:3306'

    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

volumes:
  data-mysql:
    driver: local

谢谢 曼尼

【问题讨论】:

标签: mysql docker docker-compose


【解决方案1】:

不需要 env 文件。如果你只使用 docker compose environment 定义中的变量名,它的值会自动从你的主机传输到容器:

services:
  db:
    image: "mysql:5.7"
    ports: ['3306:3306']
    environment:
      MYSQL_ROOT_PASSWORD: 

来自documentation

只有一个键的环境变量被解析为它们的 运行 Compose 的机器上的值,可以是 有助于秘密或主机特定的值。

如果出于某种原因,您想要或需要使用 env 文件,您也可以:

services:
  db:
    image: "mysql:5.7"
    ports: ['3306:3306']
    env_file:
    - production.env

在您的production.env 文件(或任何您命名的文件)中,只需输入key=value 行:

MYSQL_ROOT_PASSWORD=7op-s3cr37

另见The “env_file” configuration option

【讨论】:

  • 谢谢你,最后,如何使用 .dockerignore 来隐藏我的密码以防有人运行:docker container inspect
  • 就像你不能完全隐藏主机上的秘密一样,如果有人可以访问主机,你通常不能隐藏容器中的所有秘密,而不是有权访问容器的人。假定容器在受保护的特权环境中运行。 (而且 .dockerignore 只适用于文件,如果你正在使用它,当然你应该 .gitignore 和 .dockerignore env 文件)
  • 如果有人可以运行docker container inspect,他们也可以docker run 一个对主机文件系统具有不受限制的根级别访问的容器。我会确保运行任何docker 命令都需要sudo 访问权限并限制谁可以访问该命令。
  • 好的。 如果我的容器遭到入侵,我的 dockerignore 应该是什么样子,以防止在我的容器中显示密码?
  • 不知道您可以将 env 变量留空以通过。不过没那么重要,因为通常情况下,您的本地环境变量应该随着时间的推移而不同或不够可靠。
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2020-05-14
相关资源
最近更新 更多