首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何属性将停靠容器链接到外部mysql容器?

问如何属性将停靠容器链接到外部mysql容器?
EN

Stack Overflow用户
提问于 2017-08-07 05:10:17
回答 1查看 2.9K关注 0票数 2

我试图让一个web服务器容器与mysql服务器容器连接,但是当我试图连接mysql服务器时,比如phpmyadmin,我的主机就不知道了。

这里是我的mysql docker-compose.yml

代码语言:javascript
复制
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"

这里是我的web服务器容器

代码语言:javascript
复制
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"

我正确地设置了对接文件吗?

编辑1:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 05:33:48

问题是您使用的是两个不同的组合文件。如果在同一个网络中没有两个容器,external_links就不再工作了。见下面的文档

如果您使用的是版本2或更高的文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。从版本2开始,链接是一个遗留选项。我们建议使用网络代替。 当使用(第3版)复合文件以群模式部署堆栈时,此选项将被忽略。

使用主机IP的

因为mysql运行在映射为3306的主机上。在撰写文件中,可以添加

代码语言:javascript
复制
extra_hosts:
  - "mysql:<MACHINEIP>"

MachineIP是主机的IP。同样,这也不是推荐的方法。

使用外部网络的

docker-compose允许您定义网络。因此,您可以在你的mysql撰写文件中定义它,然后将它映射为您的其他停靠器-组合中的一个外部网络,并可以使用它的名称mysqldb访问该文件。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45539780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档