【问题标题】:Docker-compose - memsql container - backend connection problemDocker-compose - memsql 容器 - 后端连接问题
【发布时间】:2020-03-25 10:38:21
【问题描述】:

我正在尝试使用 docker-compose 在包含 memsql+java 后端的 Ubuntu 机器上启动 dockerized 环境。 我的 docker compose 文件如下所示:

version: "3.7"
services:
  memsql:
    image: memsql/quickstart
    container_name: memsql
    environment:
      MEMSQL_ROOT_PASSWORD: passW
      MEMSQL_DATABASE: db
    ports:
      - 3306:3306
      - 9000:9000
    volumes:
      - ./memsql:/var/lib/memsql

  backend:
    build:
      context: .
      dockerfile: java-dockerfile
    image: backend:1
    container_name: backend
    expose:
      - "8080"
    depends_on:
      - memsql
    volumes:
      - ./logs:/external
    command: ["java", "-jar", "server.jar", "-Xms1024m", " -Xmx2048m", "> /external/server.log"]

当我尝试启动它时,后端无法连接到我的 memsql 容器 - 它给出了连接被拒绝的错误。

memsql 容器本身正在运行,我可以访问它(docker exec -it memsql /bin/bash),查看日志(/memsql/master/tracelogs# cat memsql.log),登录它(mysql -u root -h 127.0.0.1 -P 3306 --prompt="memsql> ")。 确实,它不会创建指定的数据库,当我登录时,它也不会要求输入指定的密码。

我还尝试了不同的特定于网络的解决方案,例如使用定义的网络或将网络模式设置为“主机”,但它们都不起作用。 我怀疑这是一个与 memsql 相关的问题(是的,我知道我使用的图像被标记为已弃用),但似乎无法解决问题。在日志中我发现的唯一错误是:

ERROR: Thread 115082: Fn: Waiting for node to catch up with cluster state before starting replication management.

非常感谢任何帮助!

【问题讨论】:

  • 如何将应用程序配置为连接到数据库?您可以使用主机上的mysql 命令行客户端连接到它吗?
  • 另请注意,Docker Hub memsql/quickstart page 有一个醒目的通知,表明该图像已被弃用。
  • @DavidMaze 我有一个 java 后端,在我的 application.yml 文件中我有 jdbcUrl: jdbc:mariadb://memsql:3306/db 如果我使用 IP 并连接到另一台机器上的数据库,我的后端连接并且一切正常好的,所以由于某种原因没有看到容器。

标签: docker docker-compose singlestore


【解决方案1】:

我终于找到了问题所在:memsql 容器需要几秒钟才能启动集群,但是我的后端容器尝试事先连接到它,因此连接被拒绝错误。现在我只需要弄清楚如何将延迟或健康检查添加到等式中。到目前为止找到的解决方案都没有帮助。

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 2017-12-07
    • 2020-12-18
    • 2021-01-26
    • 2017-09-02
    • 1970-01-01
    • 2019-04-14
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多