如何访问 Bitbucket 管道中的 Docker 容器

How to access to a Docker container in a Bitbucket pipeline

提问人:Rui 提问时间:11/12/2023 更新时间:11/13/2023 访问量:46

问:

我的 Maven Java 项目需要在以下 Bitbucket 管道中执行集成测试:

learn-pipeline:
  - step:
      name: purpose merely learning about how pipeline is working
      services:
        - docker
      script:
        - docker run --detach --name some-mariadb --env MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1 --env MARIADB_DATABASE=test mariadb:latest
        - docker ps
        - mvn clean verify

第一个脚本是启动一个 MariaDB 容器供集成测试使用。最后一个脚本是运行集成测试,该测试正在访问 MariaDB docker 容器docker runmvn clean verify

此 Bitbucket 管道能够启动 MariaDB Docker 容器,但问题是集成测试无法通过 jdbc:mysql://localhost:3306/test 访问 MariaDB 数据库,并出现错误 Caused by: java.net.ConnectException: Connection rejected

:如何成功访问MariaDB Docker容器?我定义的 jdbc 地址有误吗?

docker maven bitbucket-pipelines

评论

0赞 Thorbjørn Ravn Andersen 11/12/2023
Localhost 很少是您在使用 docker 时所想的那样!
1赞 Randommm 11/13/2023
为什么你要自己启动一个docker镜像,而不是把它作为服务运行?support.atlassian.com/bitbucket-cloud/docs/......

答:

0赞 hakre 11/12/2023 #1

如何成功访问MariaDB Docker容器?

不要使用套接字连接到 MariaDB 服务器,而是使用 IPv4 或 IPv6 地址(在 Linux 上是套接字),网络是(曾经?)主机网络,请在 Bitbucket Pipelines 中使用。localhost127.0.0.1

[...我定义的 jdbc 地址有误吗?

是的,地址是错误的,这就是错误消息的本质:

原因:java.net.ConnectException:连接被拒绝

0赞 N1ngu 11/13/2023 #2

只需改用常规管道服务即可。

definitions:
  services:
    mariadb:
      image: mariadb:latest
      variables:
        MARIADB_DATABASE: test
        MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1

pipelines:
  default:
    - step:
        name: Test
        services:
          - mariadb
        script:
          - mvn clean verify

访问分离的 docker 进程也应该可以工作,但很可能您只是忘记在指令中公开数据库端口。在 URI 中使用应该没问题。但管道服务会为您处理这个问题。docker run --publish=3306:3306 whatnotlocalhost