mysql - Ansible docker_container: wordpress->mysql 没有路由到主机
问题描述
我想用 ansible、worpdress 和 mysql 创建一个 dockerized 应用程序。所以我使用了带有 de docker_container 模块的剧本:
在变量中:
dockers:
mysql:
volume: mysql-data
volume_mount: /var/lib/mysql
volume2: '{{ docker_vols }}/mysql-cnf/my.cnf'
volume_mount2: '/etc/mysql/my.cnf'
image: mysql:latest
name: mysql
restart: always
#ports: "3306:3306"
mem: "512M"
wordpress:
volume: wp-content
volume_mount: '/var/www/html/wp-content'
volume2: wp-data
volume_mount2: '/var/www/html/'
image: wordpress:latest
name: wordpress
restart: always
ports: "8080:80"
mem: "512M"
任务:
---
- name: setup mysql
docker_container:
name: "{{ dockers.mysql.name }}"
image: "{{ dockers.mysql.image }}"
volumes:
- "{{ dockers.mysql.volume }}:{{ dockers.mysql.volume_mount }}"
state: started
restart: yes
restart_policy: "{{ dockers.mysql.restart }}"
memory: "{{ dockers.mysql.mem }}"
env:
MYSQL_ROOT_PASSWORD: "{{ MYSQL_ROOT_PASSWORD }}"
MYSQL_DATABASE: "{{ MYSQL_DATABASE }}"
MYSQL_USER: "{{ MYSQL_USER }}"
MYSQL_PASSWORD: "{{ MYSQL_PASSWORD }}"
tags: [ 'docker-run' ]
- name: setup wordpress
docker_container:
name: "{{ dockers.wordpress.name }}"
image: "{{ dockers.wordpress.image }}"
volumes:
- "{{ dockers.wordpress.volume2 }}:{{ dockers.wordpress.volume_mount2 }}"
- "{{ dockers.wordpress.volume }}:{{ dockers.wordpress.volume_mount }}"
state: started
restart: yes
restart_policy: "{{ dockers.wordpress.restart }}"
memory: "{{ dockers.wordpress.mem }}"
ports:
- "{{ dockers.wordpress.ports }}"
links:
- "mysql:mysql"
env:
#WORDPRESS_DB_HOST: "{{ WORDPRESS_DB_HOST | default(omit) }}" #also tried: "mysql:3306"
WORDPRESS_DB_USER: "{{ WORDPRESS_DB_USER }}"
WORDPRESS_DB_PASSWORD: "{{ WORDPRESS_DB_PASSWORD }}"
WORDPRESS_DB_NAME: "{{ WORDPRESS_DB_NAME }}"
tags: [ 'docker-run' ]
但是在wordpress docker的日志中说:
MySQL Connection Error: (2002) No route to host
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
我认为错误出现在链接部分,但尝试了我找到的所有表格,但仍然无法使其正常工作。
解决方案
使用链接是 docker link的遗留功能。您可以创建一个 docker 网络并将两个容器连接在同一网络中,以便它们可以相互通信。
- name: "Create a network"
docker_network:
name: "{{ docker_network_name }}"
将这些行添加到每个容器中。
networks:
- name: {{ docker_network_name }}
你的设置应该像
---
- name: setup mysql
docker_container:
name: "{{ dockers.mysql.name }}"
image: "{{ dockers.mysql.image }}"
volumes:
- "{{ dockers.mysql.volume }}:{{ dockers.mysql.volume_mount }}"
state: started
restart: yes
restart_policy: "{{ dockers.mysql.restart }}"
memory: "{{ dockers.mysql.mem }}"
networks:
- name: {{ docker_network_name }}
env:
MYSQL_ROOT_PASSWORD: "{{ MYSQL_ROOT_PASSWORD }}"
MYSQL_DATABASE: "{{ MYSQL_DATABASE }}"
MYSQL_USER: "{{ MYSQL_USER }}"
MYSQL_PASSWORD: "{{ MYSQL_PASSWORD }}"
tags: [ 'docker-run' ]
- name: setup wordpress
docker_container:
name: "{{ dockers.wordpress.name }}"
image: "{{ dockers.wordpress.image }}"
volumes:
- "{{ dockers.wordpress.volume2 }}:{{ dockers.wordpress.volume_mount2 }}"
- "{{ dockers.wordpress.volume }}:{{ dockers.wordpress.volume_mount }}"
state: started
restart: yes
restart_policy: "{{ dockers.wordpress.restart }}"
memory: "{{ dockers.wordpress.mem }}"
ports:
- "{{ dockers.wordpress.ports }}"
networks:
- name: {{ docker_network_name }}
env:
#WORDPRESS_DB_HOST: "{{ WORDPRESS_DB_HOST | default(omit) }}" #also tried: "mysql:3306"
WORDPRESS_DB_USER: "{{ WORDPRESS_DB_USER }}"
WORDPRESS_DB_PASSWORD: "{{ WORDPRESS_DB_PASSWORD }}"
WORDPRESS_DB_NAME: "{{ WORDPRESS_DB_NAME }}"
tags: [ 'docker-run' ]
推荐阅读
- azure - 有没有办法跟踪 Cosmos DB 更改历史记录
- azure - Azure 数据工厂和 GraphDb
- ruby-on-rails - 模型 sanitize_forbidden_attributes rails 4 上的错误
- google-app-engine - 无法删除 GCP 项目。提示“项目服务未知错误”
- pandas - 数据包含给定 ID 的相同值。分组后,我希望得到 Pandas 数据框中的结果,每个 ID 只有一个条目
- design-patterns - 跟踪跨分布式/传统系统的数据流
- c - 如何检查矩阵在C中的行或列中是否具有相同的值
- php - PHP Excel 导入到 MYSQL 数据库在本地主机上工作正常,但在在线服务器上却不行
- swift - 任何人都可以帮助从 FirebaseDatabase 获得 2 级深度字典吗?
- python - 如何遍历两个字典列表以查找公共键值对?