【问题标题】:Ansible docker_container: wordpress->mysql No route to hostAnsible docker_container:wordpress->mysql 没有到主机的路由
【发布时间】:2020-09-23 01:56:06
【问题描述】:

我想用 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

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

【问题讨论】:

    标签: mysql wordpress docker ansible


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我看到它已被弃用的“链接”用法,不知道。我要测试一下,看看结果。
    • 还是一样。正如我在docker network lsdocker network inspect bridge 中看到的那样,它已经创建了一个桥接网络并加入了两个docker。甚至将主机名解析和IP 地址放在/etc/hosts 文件中。一定是别的什么... SELinux?我去看看
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 2019-11-21
    • 1970-01-01
    • 2019-03-08
    • 2017-08-03
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多