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

问题描述:

我试图让一个web服务器容器连接一个mysql服务器容器,但当我尝试在mysql服务器上连接时,我收到了未知的主机,如phpmyadmin。如何将docker容器链接到外部mysql容器?

这里我的MySQL泊坞窗,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" 

在这里,我的Web服务器容器

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:

[email protected]:~/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 

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

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

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

使用主机IP

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

extra_hosts: 
    - "mysql:<MACHINEIP>" 

MachineIP是您的主机的IP。同样不推荐的方式做到这一点

使用外部网络

docker-compose允许您定义网络。所以,你可以定义在你的MySQL撰写文件,然后将其映射在你的其他搬运工,组成一个外部网络,并使用其名称mysqldb

请前往以下网址可以访问相同的https://docs.docker.com/compose/networking/#using-a-pre-existing-network

+0

谢谢你,我没有意识到这个名字需要相同,因为我使用了container_name选项。我会尝试这些改变; –

+1

这是我的错,我没有看到你使用'container_name'。给我几分钟 –

+1

更正了我的答案 –