无法连接到通过 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 moduleenv 定义应该是字典对象,而不是字符串

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