如何将 spring-boot 应用程序连接到 docker-compose 中的 mariadb?

How to connect a spring-boot app to mariadb in docker-compose?

如何让 spring-boot 应用程序与数据库容器通信,而不必将数据库容器端口暴露给主机系统?

docker-compose.yml: 版本:'3.7'

服务:

  app:
    container_name: my_app
    environment:
      SPRING_DATASOURCE_URL: jdbc:mariadb://db:3306/dev
    depends_on:
      - db
  db:
    image: mariadb:10
    environment:
      MARIADB_ROOT_PASSWORD: root
      MYSQL_USER: root
      MYSQL_PASSWORD: rootpw
      MYSQL_DATABASE: dev
    volumes:
      - db:/var/lib/mysql
    #ports:
    #  - 3306:3306
volumes:
  db:

我正在寻找一种方法,app + db 可以直接相互通信,但不必打开主机端口。

因为,如果我在 db 部分启用 3306:3306 端口,我会收到一条消息,指出该端口(在我的主机上)已被使用。这是有道理的,因为我 运行 是主机上的本地 mariadb

那么我如何才能在这两个容器之间直接共享端口,而不将端口暴露给主机系统呢?

我可能是缓存或卷的问题。在我清理了 docker 中的所有内容后,上面的示例就可以工作了。 不需要 显式公开端口以便spring 与db:3306 容器通信。