提问人:Rui 提问时间:11/12/2023 更新时间:11/13/2023 访问量:46
如何访问 Bitbucket 管道中的 Docker 容器
How to access to a Docker container in a Bitbucket pipeline
问:
我的 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 run
mvn clean verify
此 Bitbucket 管道能够启动 MariaDB Docker 容器,但问题是集成测试无法通过 jdbc:mysql://localhost:3306/test
访问 MariaDB 数据库,并出现错误 Caused by: java.net.ConnectException: Connection rejected
问:如何成功访问MariaDB Docker容器?我定义的 jdbc 地址有误吗?
答:
如何成功访问MariaDB Docker容器?
不要使用套接字连接到 MariaDB 服务器,而是使用 IPv4 或 IPv6 地址(在 Linux 上是套接字),网络是(曾经?)主机网络,请在 Bitbucket Pipelines 中使用。localhost
127.0.0.1
[...我定义的 jdbc 地址有误吗?
是的,地址是错误的,这就是错误消息的本质:
原因:java.net.ConnectException:连接被拒绝
只需改用常规管道服务即可。
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 whatnot
localhost
评论