按名称自动将docker容器添加到主机

按名称自动将docker容器添加到主机,docker,docker-compose,Docker,Docker Compose,我的一个常见工作流是在web项目开发期间运行docker compose up,运行docker inspect repo_app_1 | grep IPAddress,然后在浏览器中转到IPAddress 我不想获取容器的IP,而是想将这个容器的名称及其IP添加到hosts文件中 最好的方法是什么?这当然是可能的,我可以想出一种方法——劫持docker和docker compose命令,这样每次执行后,我们都会运行一个脚本,通过awk运行docker container的输出,并将其附加到ho

我的一个常见工作流是在web项目开发期间运行
docker compose up
,运行
docker inspect repo_app_1 | grep IPAddress
,然后在浏览器中转到IPAddress

我不想获取容器的IP,而是想将这个容器的名称及其IP添加到hosts文件中

最好的方法是什么?这当然是可能的,我可以想出一种方法——劫持
docker
docker compose
命令,这样每次执行后,我们都会运行一个脚本,通过awk运行
docker container
的输出,并将其附加到hosts文件,还可以删除旧的条目,Docker感知反向代理,包括其自己的监控仪表板

例如,请参阅中的“”,以便自动注册容器并通过预定义的URL访问它们

胡安描述了如何解决“港口舞蹈”:

如果端口80映射到web-server-A,则必须为web-server-B和web-server-C选择另一个要绑定的端口。
这可能会很快变老,因为你必须记住,去A,去toB,去C

他指出,

在虚拟机上,此问题不会真正发生,因为您可以为服务器分配静态IP地址,并将其绑定到系统的主机文件(
/etc/hosts
)。
容器本质上是短暂的,通常不会在主机的网络上创建,而是在专用网络上创建,在特定范围内具有自己的随机IP地址。但是,您必须为每个启动的VM编辑
/etc/hosts
,并且列表会随着您处理的项目数量的增加而增加

Træfik解决了这两个问题,首先是不需要在URL中使用端口,其次是根本不需要编辑
/etc/hosts

新容器将通过以下方式注册到Traefik docker网络(
docker网络创建--驱动程序桥Traefik_webgateway
):


URL变得简单。

您可以将应用程序端口公开给docker主机,然后将docker主机名与该端口一起使用。您对此感到厌倦了吗?您是否考虑过在容器化负载平衡器后面运行docker compose设置中的容器?通过公开此负载平衡器的端口,您就不必担心修改主机文件。可能的副本通常使用
ports:
指令使容器端口在主机上可见,并且(特别是从主机控制台)以某种形式访问
localhost:12345
。容器专用IP地址在多个上下文(来自其他主机;在Mac上)中不起作用,因此查找它们有点不可取。@DavidMaze
ports
会将其暴露给
容器IP:port
,您还需要在config中输入
expose
来指定哪些端口应绑定到主机,以便您可以从主机在
localhost:port
上访问它。我同意用于部署的容器专用IP,但这个问题是出于开发目的,应该可以。我认为这可以将容器映射到特定URL。但是,每个容器都需要单独的配置。因为对我来说,对ip地址进行greping比这样做更容易,所以我不认为自己会使用这个。我建议使用容器的名称作为url,以避免每个容器的配置。@PeeyushKushwaha使用Træfik时,所有点都是为了您不grep IP地址,因为它(Træfik)是Docker感知的。这是在我为该容器配置它之后,正确吗?@PeeyushKushwaha我刚刚添加了文章中的示例:不涉及IP地址。@PeeyushKushwaha首先测试它,但是是的:Traefik是为这种用例设计的。
docker run -d --name some-mailhog \
    --network traefik_webgateway \
    --label traefik.docker.network=traefik_webgateway \
    --label traefik.frontend.rule=Host:mailhog.localhost \
    --label traefik.port=8025 \
    mailhog/mailhog