首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将码头群中的“项目”连接到“`mysql`”集装箱?

如何将码头群中的“项目”连接到“`mysql`”集装箱?
EN

Stack Overflow用户
提问于 2021-11-03 09:36:41
回答 1查看 417关注 0票数 0

我正试图通过下面的命令使用下面的配置docker-compose.yaml文件部署一个带有停靠群的堆栈:

代码语言:javascript
复制
docker stack deploy --with-registry-auth -c docker-compose.yaml project
代码语言:javascript
复制
version: "3.9"

services:
  mysql:
    image: mysql:8.0
    deploy:
      replicas: 1
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - internal
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: project_production
      MYSQL_USER: username
      MYSQL_PASSWORD: password
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - internal
  website:
    image: registry.gitlab.com/project/project-website:latest
    networks:
      - internal
    deploy:
      replicas: 1
    ports:
      - 3000:3000
    environment:
      - RAILS_ENV=production
      - MYSQL_HOST=mysql
      - ES_HOST=http://es01
      - project_DATABASE_USERNAME=root
      - project_DATABASE_PASSWORD=root
    depends_on:
      - es01
      - mysql

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
  mysql_data:

networks:
  internal:
    external: true
    name: project

在部署堆栈之前,我还通过以下命令为项目创建了网络:

代码语言:javascript
复制
docker network create -d overlay project

但是,当我使用project命令看到docker logs日志时,我看到下面的错误停止了我的project get启动:

代码语言:javascript
复制
Mysql2::Error: Host '10.0.2.202' is not allowed to connect to this MySQL server

我完全按照文件的建议去做,我不知道我所提出的设置有什么问题!

问题:

如何在码头群中从project连接到mysql容器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-04 19:00:33

基于文档,Docker会自动为您创建覆盖网络。因此,我认为默认情况下不需要创建外部网络,除非您有特定的需求:

当您初始化一个集群或将一个码头主机加入到一个现有的群集时,将在该码头主机上创建两个新的网络:

  • 是一种称为入口的覆盖网络,它处理与群集服务相关的控制和数据通信。当您创建一个群集服务而不将它连接到用户定义的覆盖网络时,默认情况下它会连接到入口网络。
  • 是一个名为docker_gwbridge的桥接网络,它将各个Docker守护进程连接到参与群集.

的其他守护进程。

正如Chris在注释中提到的,DB凭据也不匹配。

可选:只有当您想以root用户的身份进行连接时才需要root,这在生产环境中是不推荐的。也不需要向主机公开端口,因为数据库服务只能在集群内部使用。因此,如果仍然希望使用根用户,可以将变量设置为只允许来自集群内部的连接,如MYSQL_ROOT_HOST=10.*.*.*

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

https://stackoverflow.com/questions/69822573

复制
相关文章

相似问题

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