gal*_*ben 8 docker docker-compose
在我的docker-compose文件中,需要多个容器来知道特定容器的主机名,包括此特定容器.
链接不起作用,因为容器无法链接到自身.
基本上,我正在寻找的是一种在docker-compose中对localhost进行别名的方法.
Kin*_*ang 18
你应该避免使用链接.相反,同一个Docker网络上的服务可以通过使用服务名称作为DNS名称来找到彼此.使用它来引用您描述的特定容器,包括它引用自身的时间.
例如,在下面组成的Docker Compose文件中,如果someservice是在端口80上anotherservice服务的Web服务器,则服务将能够连接到它http://someservice/,因为它们位于公共网络上the_net.
version: '3'
services:
someservice:
image: someserviceimage
networks:
- the_net
anotherservice:
image: anotherserviceimage
networks:
- the_net
networks:
the_net:
Run Code Online (Sandbox Code Playgroud)
someservice也可以达到自己http://someservice/.
gal*_*ben 17
extra_hosts 帮我解决了这个问题。
extra_hosts:
- "hostname:127.0.0.1"
Run Code Online (Sandbox Code Playgroud)
来自 docker-compose 文档:
extra_hosts 添加主机名映射。使用与 docker 客户端 --add-host 参数相同的值。
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229" 一个包含 IP 地址和主机名的条目将在容器内的 /etc/hosts 中为此服务创建,例如:
162.242.195.82 某个主机 50.31.209.229 其他主机
pen*_*han 15
我认为正确的答案来自
别名可以定义为服务网络声明的一部分。有关更多详细信息,请参阅Compose 文件参考中的别名。– King Chung Huang 2017 年 4 月 24 日 15:18
这是文档中的示例
version: '2'
services:
web:
build: ./web
networks:
- new
worker:
build: ./worker
networks:
- legacy
db:
image: mysql
networks:
new:
aliases:
- database
legacy:
aliases:
- mysql
networks:
new:
legacy:
Run Code Online (Sandbox Code Playgroud)
您可以访问db此 docker-compose 中的 ,也可以用于mysql连接此db
这external_links是本线程中未提及的一个更有用的参数:
external_links:
- redis_1
- project_db_1:mysql
- project_db_2:postgresql
- {CONTAINER}:{ALIAS}
Run Code Online (Sandbox Code Playgroud)
它接近extra_hosts:
extra_hosts:
- "somehost:127.0.0.1"
- "otherhost:127.0.0.2"
- {HOSTNAME}:{IP}
Run Code Online (Sandbox Code Playgroud)
但允许设置动态容器IP
此外,还可以在网络级别添加别名。这是如何向网络添加别名的两个答案 [ 1 , 2 ],但我想添加额外的信息:
如果您没有在 docker 文件中设置网络,您可以使用将default别名添加到默认网络:
services:
db:
networks:
default:
aliases:
- database
- postgres
Run Code Online (Sandbox Code Playgroud)
感谢这个答案
| 归档时间: |
|
| 查看次数: |
17572 次 |
| 最近记录: |