docker-compose in gitlab-ci: expose ports



我喜欢为集成测试设置一个gitlab存储库和一个带有docker compose的gitlab ci。

我终于设法用docker compose启动了一些容器。

image: docker/compose:1.29.2
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_HOSTNAME: myhost
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "" #TODO
services:
- name: docker:dind
alias: docker
command: [
"--registry-mirror=https://artifactory.mycorp.net"
]

现在我面临的问题是,我需要与一些在windows服务器上运行的服务进行网络交互,这些服务带有(与测试无关的(UI和其他东西,所以我无法通过足够的努力将它们固定化。

gitlab运行程序仅在这一个项目的服务器上运行!

我的想法是,我需要让docker:dind服务位于主机-网络上,这样在该服务中生成的docker容器将通过其显式公开的端口可用。然而,我不知道如何才能做到这一点
也欢迎任何其他方法来解决这个问题!

我找到了一个目前似乎可以运行的解决方案:

  1. 创建网络,例如docker network create gitlab-runner(桥接模式(
  2. 通过将network_mode设置为前面创建的网络名称(例如"gitlab runner"(来配置gitlab运行程序以使用该网络
  3. 手动启动dind-容器,连接到之前创建的网络,暴露必要的端口(范围(
  4. 不要在.gitlab-ci.yml中创建dind-容器作为服务

到目前为止,它似乎适用于启动zookeeper、kafka和kafka restproxy的最小示例
对于整个项目,我仍然有一些错误,但我认为它们与此问题无关。如果结果是错误的,我会随时向您通报最新情况。

实际上,错误与此问题有关:使用此方法,签出的项目可在docker/compose-容器中使用。启动容器时,这是在dind-容器的上下文中完成的,其中不存在文件
可以使用";构建"-首先在新的docker容器中执行步骤,或者通过共享卷使其可用。

您必须确保两个服务都在同一个docker网络中才能实现您想要的。通常,当创建图像时,它们假设不同的网络,但这可以由u配置,以允许它们共享同一网络。下面是我的意思的一个例子。对你的集装箱也这样做

docker network create db_network docker run -d --name mysql-spi1 --publish 3306 --network db_network --restart unless-stopped --env MYSQL_ROOT_PASSWORD=ebsbduabdc --volume mysqlspi-datadir:/var/lib/mysql mysql:8 --default-authentication-plugin=mysql_native_password

最新更新