首页 > 解决方案 > 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

我认为错误出现在链接部分,但尝试了我找到的所有表格,但仍然无法使其正常工作。

标签: mysqlwordpressdockeransible

解决方案


使用链接是 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' ]


推荐阅读