在 docker 中添加主机重定向

Posted

技术标签:

【中文标题】在 docker 中添加主机重定向【英文标题】:add hosts redirection in docker 【发布时间】:2016-03-18 11:50:41 【问题描述】:

我在虚拟机中使用 gitlab。我将使用 gitlab-ci(在同一个 VM 中)和 docker。

为了访问我的 gitlab,我使用域 git.local(重定向到我计算机上的 VM,重定向到我的 VM 中的 127.0.0.1)。

当我启动测试时,测试返回:

致命:无法访问“http://gitlab-ci-token:xxxxxx@git.local/thib3113/ESCF.git/”:无法解析主机“git.local”

所以我的问题是:如何将 git.local 的重定向添加到容器 IP ?我看到了 docker 的 arg -h <host>,但我不知道如何告诉 gitlab 使用这个参数。或者可能是告诉 docker 使用容器 dns 的配置?

我看到了这个:How do I get a Docker Gitlab CI runner to access Git on its parent host? 但同样的问题,我不知道如何添加参数:/。

【问题讨论】:

How do I get a Docker Gitlab CI runner to access Git on its parent host?的可能重复 【参考方案1】:

根据GitLab CI Runner Advanced configuration,您可以尝试在您的GitLab CI 运行器中使用extra_hosts 参数。 在/etc/gitlab-runner/config.toml

[[runners]]
  url = "http://localhost/ci"
  token = "TOKEN"
  name = "my_runner"
  executor = "docker"
  [runners.docker]
    host = "tcp://<DOCKER_DAEMON_IP>:2375"
    image = "..."
    ...
    extra_hosts = ["localhost:192.168.0.39"]

在这个例子中,当在容器内运行测试 git 将尝试从 localhost 进行克隆时,它将使用192.168.0.39 作为该主机名的 IP。

【讨论】:

【参考方案2】:

如果您想在 docker 中使用 dns,请使用 dns-gen 按照这些简单的步骤操作,您可以将主机名分配给多个 docker 容器。 1.首先通过发布这个命令知道你的docker IP

/sbin/ifconfig docker0 | grep "inet" | head -n1 | awk ' print $2' | cut -d: -f2

    现在记下输出 ip 和启动 dns-gen 容器的时间(ps:不要忘记添加您在 :53:53 之前发出上述命令获得的 docker ip)

docker run --detach \ --name dns-gen \ --publish dockerip:53:53/udp \ --volume /var/run/docker.sock:/var/run/docker.sock \ jderusse/dns-gen

    最后一件事:在 resolv.conf 中注册新的 DnsServer

echo "nameserver dockerip" | sudo tee --append /etc/resolvconf/resolv.conf.d/head sudo resolvconf -u

现在您应该可以在浏览器中访问您的 docker 容器了:- http://containername.docker

希望它有效..谢谢..

Shubhankit

【讨论】:

以上是关于在 docker 中添加主机重定向的主要内容,如果未能解决你的问题,请参考以下文章

仅重定向到裸域

nginx 域名重定向

Docker nginx 代理到主机

虚拟主机怎么做全站301重定向跳转?

通过将主机名放在主机文件中来加速 Apache 重定向

如何禁用 nginx 入口控制器的自动 https 重定向?