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 设置。
考虑到您的要求,这会有点复杂,但它应该可以工作。
这里的目标是修改主机上的 /etc/hosts,而不需要运行用户的手动干预。非功能性要求是,当您的应用程序在非本地运行时,它不应影响您的应用程序(即,不更改运行应用程序的 nginx 或支持容器)。更改应仅限于 docker-compose 文件和实用程序脚本。
为此,我建议以下两件事之一:
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 语法。或者
请注意,在这两种情况下,我假设端口 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 的基本页面。
| 归档时间: |
|
| 查看次数: |
10681 次 |
| 最近记录: |