【发布时间】:2018-03-29 20:59:38
【问题描述】:
我有一个 maven 项目,它使用 io.fabric8 docker-maven-plugin 来启动数据库,作为我的集成测试的一部分。当我在本地运行集成测试时,它可以工作,但是在我的 Jenkins 服务器上运行时,我收到一条错误消息,提示没有 DOCKER_HOST 变量。
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.20.1:start (prepare-itdatabase) on project myproject: Execution prepare-itdatabase of goal io.fabric8:docker-maven-plugin:0.20.1:start failed: No <dockerHost> given, no DOCKER_HOST environment variable, no read/writable '/var/run/docker.sock' or '//./pipe/docker_engine' and no external provider like Docker machine configured -> [Help 1]
值得一提的是,我的 Jenkins 实例本身是通过 docker 启动的,只需使用 docker run jenkins 之类的东西。
我尝试在启动 Jenkins 时将 DOCKER_HOST 变量设置为 tcp://192.168.59.103:2375,但这只是导致它在构建中超时。
【问题讨论】:
-
已经有一些关于如何在 docker (dind) 中运行 docker 的示例。主要是您需要告诉您的 docker 容器从其主机使用 docker(没有尝试过,只是为了展示这个想法): docker run --rm --user root --name myjenkins -v /var/run/docker.sock :/var/run/docker.sock -p 8080:8080 -p 50000:50000 詹金斯
-
我做到了,谢谢!然而,我现在的问题是我的测试(在 jenkins docker 中运行)无法连接到 127.0.0.1 上的 mysql docker。使用 --net="host" 运行 jenkins docker 并没有帮助。
-
我认为如果需要运行多个容器以进行测试,最好使用 docker-compose,因为它可以让您按容器名称链接容器,而不会自己弄乱大多数网络
-
docker-compose 的问题在于它意味着我必须更改我的 maven 文件(如果可能的话?)。我想利用 docker-maven 插件来启动我的测试运行所需的依赖项。
-
您使用的插件版本可能不包括该插件版本,但当前版本 (0.24.0) 对 compose 有一些支持:dmp.fabric8.io/#docker-compose - 如果您更喜欢在 xml 或 compose yaml 文件中配置设置 -两者都应该可以使用该插件。我只是发现撰写文件更具可读性,它是从插件 xml 配置中生成的。