首页 > 解决方案 > 使用 mysql 的网络问题,进入 docker-compose 网络中的应用程序

问题描述

我正在用 golang 编写一个 graphql Web API,并希望使用 docker-compose 来部署它。目前有四个服务从一个 compose 文件运行:一个 ansible 服务器(这里并不真正相关),两个 mysql 服务器(一个主服务器,一个副本),以及一个稍后应该运行 graphql 服务的容器。但是,我无法将 graphql 实例连接到任何一个 mysql 实例。这两个数据库可以很好地相互配合(即复制按预期工作),我可以从 ansible 服务器 ssh 到它们。此外,我能够从另一个服务 ping 每个服务。一切都在 Docker Desktop 20.10.0 上运行,Windows 10 上带有 WSL2 后端。这是 compose 文件:

version: "3"

services: 

  ansible:
    container_name: ansible
    build: ansible/
    volumes: 
      - ./ansible/data/:/etc/ansible/
    stdin_open: true
    tty: true
    ports:
      - "22"
    command: /bin/bash -D

  raspi:
    container_name: raspi
    build: raspi/
    stdin_open: true
    tty: true
    ports: 
      - "22"
  
  # two identical ubuntu servers to install mysql on
  mysql_primary:
    container_name: mysql_primary
    build: mysql/
    image: mysql:latest
    tty: true
    stdin_open: true
    ports:
      - "3306:3306"
    volumes: 
      - "mysql_primary:/var/lib/mysql:rw"


  mysql_replica:
    container_name: mysql_replica
    image: mysql:latest
    tty: true
    stdin_open: true
    environment:
      MYSQL_DATABASE: primary
      MYSQL_USER: graphql
      MYSQL_PASSWORD: graphql
      MYSQL_TCP_PORT: 3307
    ports:
      - "3307:3307"
    volumes: 
      - "mysql_replica:/var/lib/mysql:rw"

  graphql:
    container_name: graphql
    image: golang:latest
    tty: true
    stdin_open: true
    volumes:
      - type: bind
        source: ./graphql
        target: /app
    environment: 
      WAIT_HOSTS: mysql_replica:3307
    ports:
      - "8080:8080"
    working_dir: /app
    command: tail -f /dev/null

volumes:
  mysql_primary:
  mysql_replica:

我已经尝试过的:

整个事情有点像概念证明,这就是为什么我不使用现成的 mysql 映像,而是使用 ansible 安装和部署所有东西。

提前感谢您的任何帮助,如果您需要任何进一步的信息,请告诉我。

标签: networkingdocker-compose

解决方案


推荐阅读