如何属性将docker容器链接到外部mysql容器?

时间:2017-08-07 05:10:17

标签: php mysql docker nginx docker-compose

我正在尝试使用一个mysql-server容器连接一个Web服务器容器,但是当我尝试在mysql服务器上连接时,我会收到未知主机,如phpmyadmin。

这是我的mysql docker-compose.yml

version: '3'
services:
    mysqldb:
        image: mysql
        container_name: mysql
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        ports:
            - "3306:3306"
        expose:
            - "3306"
        volumes:
            - "./data/mysql:/var/lib/mysql"

这是我的网络服务器容器

version: '3'
services:
    web:
        image: nginx:latest
        container_name: web
        ports:
            - "80:80"
            - "443:443"
        restart: always
        volumes:
            - "./etc/nginx/nginx.conf:/etc/nginx/nginx.conf"
            - "./etc/nginx/sites-enabled:/etc/nginx/sites-enabled"
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./data/domains:/domains"
        depends_on:
            - php
        external_links:
            - "mysql:mysql"
    php:
        image: nanoninja/php-fpm
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"
            - "./data/domains:/domains"
    myadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "8080:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
        restart: always
        external_links:
            - "mysql:mysql"

我是否正确设置了docker-compose文件?

编辑1:

root@server:~/docker# docker ps | grep mysql
0d49167a6aae        mysql                                            "docker-entrypoint..."   About an hour ago   Up About an hour    0.0.0.0:3306->3306/tcp                     mysql

1 个答案:

答案 0 :(得分:3)

问题是您使用的是两个不同的撰写文件。如果您不在同一网络上安装两个容器,则external_links不再起作用。请参阅下面的文档

  

如果您使用的是版本2或更高版本的文件格式,则外部创建的容器必须至少连接到与链接到它们的服务相同的网络之一。从版本2开始,链接是一种传统选项。我们建议使用网络。

     

使用(版本3)Compose文件在swarm模式下部署堆栈时,将忽略此选项。

使用主机IP

由于你的mysql正在主机上运行映射3306。在您的撰写文件中,您可以添加

extra_hosts:
  - "mysql:<MACHINEIP>"

MachineIP是您的主机的IP。再次不是推荐的方法

使用外部网络

docker-compose允许您定义网络。因此,您可以在mysql compose文件中定义该文件,然后将其作为外部网络映射到其他docker-compose中,并使用其名称mysqldb

访问相同的文件。

请参阅此网址https://docs.docker.com/compose/networking/#using-a-pre-existing-network