通过配置文件为以docker compose启动的mysql docker容器设置mysql根密码的正确方法是什么?

tkqqtvp1  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(372)

我有一个python/sqlalchemy应用程序,我想让它与mysql数据库通信,这两个数据库都在docker容器中,都是通过docker compose启动的。
我认为为mysql数据库建立凭据的正确方法是使用从配置文件中提取的环境变量。我相信这将使我能够轻松地在本地开发,然后在部署应用程序时,可以轻松地在服务器上创建一个配置文件,尽管我还不能完全确定这个过程。
现在,我的mysql数据库的密码是 root 不被接受,无论源代码是python服务器还是 docker exec -it . 也就是说,环境变量 MYSQL_ROOT_PASSWORD 在mysql容器中似乎可以正确访问。我将演示:
/docker-compose.dev.yml

version: '3.8'

services:
 api:
  build:
   context: ./backend/
  ports:
  - 5000:5000
  env_file:
  - .dev.env
  networks:
    - local-net
  depends_on:
    - mysqldb

 mysqldb:
  image: mysql
  # container_name: "mysqldb"
  ports:
  - 3306:3306
  env_file:
  - .dev.env
  volumes:
  - mysql:/var/lib/mysql
  - mysql_config:/etc/mysql
  networks:
  - local-net

 frontend:
   build:
     context: ./frontend/
   ports:
   - 8080:8080

volumes:
  mysql:
  mysql_config:

networks:
  local-net:
    driver: bridge

我相信传递env文件的正确方法是通过 env_file ,这似乎起到了作用:
/.dev.env

MYSQL_ROOT_PASSWORD='password'
MYSQL_USER=root
MYSQL_HOST=mysqldb
MYSQL_DB='remixguesser'
MYSQL_PORT=3306

我相信它是有效的,因为如果我做了以下事情,它就会回来 password ```
$ docker exec -it game-remix-guesser_mysqldb_1 bash
root@206acfa56847:/# echo $MYSQL_ROOT_PASSWORD
password

但是,这不是用户的密码 `root` ```
root@206acfa56847:/# mysql -u root -p
Enter password:

然后输入 password 我得到:

ERROR 1045 (28000): Access denied for user 'root'@'(ip)' (using password: YES)

所以 password 不是用户的密码吗 root 不管我的意图。我相信这会导致我在python中出现错误:

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

尽管已确认我可以从环境文件访问与mysql服务器相同的环境变量:
/backend/app/database.py

username = os.getenv('MYSQL_USER')
password = os.getenv('MYSQL_ROOT_PASSWORD')
host = os.getenv('MYSQL_HOST')
port = os.getenv('MYSQL_PORT')
DB_NAME = os.getenv('MYSQL_DB')

print(username)
print(password)
print(host)
print(port)
SQLALCHEMY_DATABASE_URL = f"mysql+pymysql://{username}:{password}@{host}:{port}"

在获取错误之前打印:

api_1       | root
api_1       | password
api_1       | mysqldb
api_1       | 3306

如何正确地建立mysql服务器docker映像,使我能够与python服务器共享凭据并从python服务器连接到它?我相信答案是“使用 .env 因此,我的问题是,如何使用通过docker compose传入的.env配置文件为mysql docker映像正确设置用户和密码?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题