docker-compose 主机的 ip/hostname

Voj*_*ěch 6 docker docker-compose

我有以下 docker-compose 文件:

nginx:
    image: nginx
    hostname: myservice.local
    volumes:
        - nginx.local.conf:/etc/nginx/conf.d/myservice.conf
    container_name: goout-nginx
Run Code Online (Sandbox Code Playgroud)

docker-compose 有没有办法为主机设置 myservice.local ?目前在主机上调用它不会做任何事情:

$ ping myservice.local
ping: cannot resolve myservice.local: Unknown host
Run Code Online (Sandbox Code Playgroud)

我不想为此手动更新本地/etc/hosts

编辑:

我的问题似乎比我之前想象的更复杂。我正在尝试为我的同事创建一个开发设置,他们可以在他们的机器上本地运行。

这应该是一个80/443在浏览器端口上运行的易于运行的应用程序。这不能在localhost:80/443apache 上运行,因为这些端口已经被 apache 在他们的机器上占用和使用。为此,我希望跑步机分配 IP 地址,以便他们只需打开myservice.local. 这不必对外界访问,只有主机才能访问。

设置应该非常简单——我希望所有这一切都可以通过运行来实现docker-compose up——我希望避免任何复杂的网络、IP 表或 /etc/hosts 设置。

Pat*_*ick 5

考虑到您的要求,这会有点复杂,但它应该可以工作。

这里的目标是修改主机上的 /etc/hosts,而不需要运行用户的手动干预。非功能性要求是,当您的应用程序在非本地运行时,它不应影响您的应用程序(即,不更改运行应用程序的 nginx 或支持容器)。更改应仅限于 docker-compose 文件和实用程序脚本。

为此,我建议以下两件事之一:

  1. 一个 bash 脚本,如果该条目尚不存在,则将其插入到其 /etc/hosts 中,grep -q -F '<static_ip> myservice.local' /etc/hosts || echo '<static_ip> myservice.local' >> /etc/hosts然后使用 启动 docker compose docker-compose up -d。该脚本是幂等的,因此如果 grep 在 /etc/hosts 中找到该行,则不应再次添加该行。这需要您为 nginx 容器分配一个静态 IP,但考虑到您可以在 docker-compose 中执行此操作,并且它不会与您的主机冲突,这应该满足您的要求。将文件命名为“startMyApp.sh”,这样就可以清楚地了解它的作用,而且不懂技术的人应该倾向于使用它而不是 docker-compose 语法。

或者

  1. 创建一个新的docker容器,将主机的/etc/hosts文件映射到容器中的/tmp/hosts。然后,您可以在新的 docker 容器中使用网络发现来获取 Nginx 容器的 IP,并使用与上面相同的方法将其添加到主机文件中。这里唯一的好处是您不需要静态 IP。我认为选项 1 更容易。

请注意,在这两种情况下,我假设端口 80/443 已从您的 Web 服务器容器中公开。除非您运行代理来重新映射它们,否则您需要这样做。

样本运行:

version: '2'

services:

  tomcat:
    image: tomcat
    ports: 
      - "1234:8080"
    hostname: myservice.local
    networks:
      my_network:
        ipv4_address: 10.5.0.5

networks:
  my_network:
    driver: bridge
    ipam:
      config:
        - subnet: 10.5.0.0/16
          gateway: 10.5.0.1 
Run Code Online (Sandbox Code Playgroud)

grep -q -F "myservice.local 10.5.0.5" || sudo echo "myservice.local 10.5.0.5" >> /etc/hosts docker-compose up -d

打开网络浏览器并浏览到“myservice.local:8080”,您可以在那里看到 apache tomcat 的基本页面。