同一主机上的2个容器之间的通信

时间:2017-07-29 21:02:42

标签: mysql docker amazon-ec2 docker-compose

我必须设置一个测试环境,其中有一个Web应用程序容器和一个MySql容器。 Web应用程序连接到MySql DB以获取要显示的一些数据。我写了一个docker compose文件,当我执行它时,在同一个桥接网络中创建了2个容器,但是,我仍然无法从Web应用程序容器访问数据库。我在AWS EC2 Amazon Linux机器上运行它。虽然我可以使用相同的用户凭据从服务器连接到数据库。

    version: '2'
services:
  consul:
    image: "gliderlabs/consul-server"
    command: "-server -bootstrap"
    hostname: consul
    container_name: consul
    ports:
     - "8400:8400"
     - "8500:8500"
     - "172.17.0.1:53:8600/udp"
    networks:
     - my_net
  registrator:
    image: "gliderlabs/registrator"
    command: "-internal consul://172.17.0.1:8500"
    container_name: registrator
    hostname: registrator
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    depends_on:
      - consul
    networks:
     - my_net
  db:
    image: "mysql:5.5"
    container_name: mysql
    hostname: mysql
    volumes:
       - ./mydb:/docker-entrypoint-initdb.d
    environment:
       MYSQL_ROOT_PASSWORD: xxxx
    depends_on:
      - registrator
    ports:
      - 3306:3306
    networks:
     - my_net
  web:
    build: .
    depends_on:
      - db
      - consul
    ports:
     - 8080:8080
    volumes:
      - .:/code
    networks:
     - my_net
networks:
  my_net:
    driver: bridge

连接代码:

cnx = mysql.connector.connect(host='{0}'.format(db_host),user="root",passwd="xxxx",db="mysql")
    if cnx.is_connected():
        print(' Success! Connected to MySQL database')

db_host = will be taken from consul dns query

我从consul dns查询中获取了mysql容器的正确桥接IP。

0 个答案:

没有答案