无法连接到通过 ansible 启动的 MySQL docker 容器
Can't connect to MySQL docker container launched via ansible
我在尝试连接到我通过 ansible 脚本启动的 MySQL Docker 容器时遇到 "Access denied" 错误。如果我使用 Docker CLI 工具创建容器,一切正常。我想知道这是否与环境变量有关。
这有效
$ docker run --name database -e MYSQL_ROOT_PASSWORD=hunter2 -d mysql:5.7
$ mysql -h $CONTAINER_IP_ADDRESS -u root -phunter2
$ mysql>
这是坏的
playbook.yml
- name: Start new MySQL container
docker:
name: database
image: mysql:5.7
state: running
env:
MYSQL_ROOT_PASSWORD=hunter2
然后连接失败:
$ mysql -h $CONTAINER_IP_ADDRESS -u root -phunter2
ERROR 1045 (28000): Access denied for user 'root'@'$CONTAINER_IP_ADDRESS' (using password: YES)
知道我在这里遗漏了什么吗?
docker module 的 env
定义应该是字典对象,而不是字符串
env:
MYSQL_ROOT_PASSWORD: hunter2
一段时间后我发现ansible和Docker玩的不太好。我一直在将一些基础结构从 ansible 转移到 Docker,并保留一些遗留代码,例如将用户添加到 mysql 或转储数据库在 Ansible 中不起作用。
解决方法是使用shell代替:
- name: Drop/delete mysql table {{ mysql_table }}
shell: mysqladmin -h 127.0.0.1 -p{{ mysql_password }} -u{{ mysql_user }} drop {{ mysql_table }} -f
# If it fails it means db was already deleted, so continue.
ignore_errors: True
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick
- name: Add mysql table {{ mysql_table }}
shell: mysqladmin -h 127.0.0.1 -p{{ mysql_password }} -u{{ mysql_user }} create {{ mysql_table }} -f
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick
- name: Create mysql user {{ mysql_user }} in {{ mysql_table }}
shell: echo "CREATE USER {{ mysql_user }}@'localhost' IDENTIFIED BY '{{ mysql_password }}';" | mysql -h 127.0.0.1 -proot -uroot
# The user may already exists in a previous run
ignore_errors: True
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick
我在尝试连接到我通过 ansible 脚本启动的 MySQL Docker 容器时遇到 "Access denied" 错误。如果我使用 Docker CLI 工具创建容器,一切正常。我想知道这是否与环境变量有关。
这有效
$ docker run --name database -e MYSQL_ROOT_PASSWORD=hunter2 -d mysql:5.7
$ mysql -h $CONTAINER_IP_ADDRESS -u root -phunter2
$ mysql>
这是坏的
playbook.yml
- name: Start new MySQL container
docker:
name: database
image: mysql:5.7
state: running
env:
MYSQL_ROOT_PASSWORD=hunter2
然后连接失败:
$ mysql -h $CONTAINER_IP_ADDRESS -u root -phunter2
ERROR 1045 (28000): Access denied for user 'root'@'$CONTAINER_IP_ADDRESS' (using password: YES)
知道我在这里遗漏了什么吗?
docker module 的 env
定义应该是字典对象,而不是字符串
env:
MYSQL_ROOT_PASSWORD: hunter2
一段时间后我发现ansible和Docker玩的不太好。我一直在将一些基础结构从 ansible 转移到 Docker,并保留一些遗留代码,例如将用户添加到 mysql 或转储数据库在 Ansible 中不起作用。
解决方法是使用shell代替:
- name: Drop/delete mysql table {{ mysql_table }}
shell: mysqladmin -h 127.0.0.1 -p{{ mysql_password }} -u{{ mysql_user }} drop {{ mysql_table }} -f
# If it fails it means db was already deleted, so continue.
ignore_errors: True
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick
- name: Add mysql table {{ mysql_table }}
shell: mysqladmin -h 127.0.0.1 -p{{ mysql_password }} -u{{ mysql_user }} create {{ mysql_table }} -f
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick
- name: Create mysql user {{ mysql_user }} in {{ mysql_table }}
shell: echo "CREATE USER {{ mysql_user }}@'localhost' IDENTIFIED BY '{{ mysql_password }}';" | mysql -h 127.0.0.1 -proot -uroot
# The user may already exists in a previous run
ignore_errors: True
tags:
- mysql
- mysql_rebuild_db
- mysql_rebuild_db_quick