我很难设置我的本地网络并需要一些帮助。如果有人更习惯使用DNS和docker,这可能不是一个难题,因为它对我来说。
我有一个在192.168.1.212
上运行Ubuntu的本地服务器。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
服务器使用软件运行多个docker容器,供我开发。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6b079af1c2d sameersbn/gitlab:latest "/sbin/entrypoint.sh…" 16 hours ago Up 16 hours 0.0.0.0:10022->22/tcp, 0.0.0.0:1080->80/tcp, 0.0.0.0:10443->443/tcp gitlab_gitlab_1
49eec1e36038 sameersbn/redis:latest "/sbin/entrypoint.sh…" 9 days ago Up 16 hours 6379/tcp gitlab_redis_1
1d6acbb1d475 sameersbn/postgresql:9.6-2 "/sbin/entrypoint.sh" 10 months ago Up 16 hours 5432/tcp gitlab_postgresql_1
目前我正在使用https://192.168.1.212:10443
访问我的gitlab服务器。我的本地计算机有ip 192.168.1.156
。
我希望能够在我的ubuntu服务器上运行DNS,解决需求,特定域,停靠者容器,如https://gitlab.internal
。
目前我需要将码头工人的每个端口转发到我的主机。这解决了非方便的地址,如ssh://git@192.168.1.212:10022/my_group/my_project.git
来解决我的git项目。首先,与我的合作伙伴安排主机的端口范围有点混乱,如果端口发生变化,它可能会破坏现有网址。
此外,我想设置一个必须链接到gitlab的docker注册表。因此,必须使用此注册表配置gitlab和url以及一些访问令牌。因此,docker容器本身也必须能够解析我的自定义URL,例如regisrty配置中的realm: https://gitlab.itnern/jwt/auth
和gitlab配置中的registry_external_url 'https://registry.docker.internal'
。
另一个棘手的部分可能是我的跑步者设置。这些机器连接到gitlab并为我的ci / d管道供电。但是,如果我的本地计算机可以转发到docker容器,这对于跑步者来说应该不是什么大问题。至少我猜是这样。
是否有人遇到类似的问题或者设置反向代理或DNS服务的经验?任何帮助都会受到欢迎。
提前致谢 迈克尔
答案 0 :(得分:0)
设置DNS以访问本地容器有两种方法。
您的泊坞窗文件端口不会更改,因为它与特定于应用程序的主机地图相关,可以更改。
所以这里是避免端口冲突和直接使用容器IP访问容器的解决方案。
此脚本将获取容器的IP,并将在/ etc / hosts中设置DNS。因此,您无需使用HOST端口映射端口即可直接访问。
要运行容器,请创建 myscript.sh
sudo ./myscript.sh container_name host_for_container docker_image
sudo ./mysript.sh gitlab gitlab.itnern.com gitlabsameersbn/gitlab:latest
因此,这将运行您的容器并在主机中设置DNS,无需端口假设www.gitlab.intern.com
即可访问。需要以sudo身份运行
#!/bin/bash
docker_container_name=$1
docker_host=$2
docker_image=$3
function process_request(){
docker run --name $docker_container_name -dit $docker_image
declare -a container_list=('platform')
# check if successfully run
if [ "$(docker inspect -f {{.State.Running}} $docker_container_name)" ]; then
# getting container ip by container name
container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $docker_container_name)
#delete if already exist value in host etc conf
sed -i "/$container_ip $docker_host/d" /etc/hosts
#inset ip with domain
sed -i "1s/^/$container_ip $docker_host\n/" /etc/hosts
fi
if [ $# -eq 3 ]; then
process_request "$@"
else
echo "Insufficient number of arguments, at least 3 arguments required to run container and set up DNS at host config"
fi
第二添加主机以便在容器--add-host=IP
之外访问,以便您的容器可以使用ip调用其他服务。
--add-host="" : Add a line to /etc/hosts (host:IP)
因此 - 在主机网络模式下允许使用主机名,并且仅允许使用主机名 更改容器内的主机名。与--hostname类似, --add-host, - DNS, - DNS-search和--dns-option选项可用于主机网络模式。这些选项更新/ etc / hosts或 容器内的/etc/resolv.conf。没有变化 主机上的/ etc / hosts和/etc/resolv.conf
管理/ etc / hosts您的容器将在/ etc / hosts中包含哪些行 定义容器本身的主机名以及localhost和a 其他一些常见的东西。 --add-host标志可用于添加 / etc / hosts的其他行。
docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
https://docs.docker.com/engine/reference/run/#network-settings