Yug*_*ngh 24 docker docker-compose
什么是使用container_name的docker-compose.yml文件?我可以将它用作文件中hostname的服务名称吗docker-compose.yml?
此外,当我hostname在服务下明确写入时,它是否会覆盖由service name?
Dav*_*aze 43
hostname:只是设置容器认为它自己的主机名是什么。在不寻常的情况下,您在容器内有一个外壳,它可能会显示在提示中。它对外界的任何东西都没有影响,通常也没有设置它的意义。(它与主机名(1) 的效果基本相同:该命令不会导致主机外的任何内容知道您设置的名称。)
container_name:在运行时设置容器的实际名称,而不是让 Docker Compose 生成它。如果此名称与 中的块名称不同services:,则这两个名称都可用作容器间通信的 DNS 名称。除非你需要用来docker管理 Compose 启动的容器,否则你通常也不需要设置它。
如果您省略这两个设置,一个容器可以networks:使用services:块的名称和容器内服务正在侦听的端口访问另一个容器(前提是它们在同一个 Docker Compose 文件中并且具有兼容的设置)。
version: '3'
services:
redis:
image: redis
db:
image: mysql
ports: [6033:3306]
app:
build: .
ports: [12345:8990]
env:
REDIS_HOST: redis
REDIS_PORT: 6379
MYSQL_HOST: db
MYSQL_PORT: 3306
Run Code Online (Sandbox Code Playgroud)
最简单的答案如下:
container_name:这是您在使用docker container ls命令列出正在运行的容器时从主机看到的容器名称。
主机名:容器的主机名。实际上,您在此处定义的名称将添加到/etc/hosts文件中:
$ exec -it myserver /bin/bash
bash-4.2# cat /etc/hosts
127.0.0.1 localhost
172.18.0.2 myserver
Run Code Online (Sandbox Code Playgroud)
这意味着您可以在 Docker 网络中通过该名称 ping 机器。
我强烈建议将这两个参数设置为相同以避免混淆。
一个示例 docker-compose.yml 文件:
version: '3'
services:
database-server:
image: ...
container_name: database-server
hostname: database-server
ports:
- "xxxx:yyyy"
web-server:
image: ...
container_name: web-server
hostname: web-server
ports:
- "xxxx:xxxx"
- "5101:4001" # debug port
Run Code Online (Sandbox Code Playgroud)