container_name
文件中的docker-compose.yml
有什么用途?我可以将其用作hostname
吗,它不过是docker-compose.yml
文件中的服务名称。
当我在服务下显式地写入hostname
时,它是否会覆盖service name
所代表的主机名?
答案 0 :(得分:7)
最简单的答案如下:
container_name:这是您在使用 docker container ls
命令列出正在运行的容器时从主机看到的容器名称。
hostname: 容器的主机名。实际上,您在此处定义的名称将添加到 /etc/hosts
文件中:
$ exec -it myserver /bin/bash
bash-4.2# cat /etc/hosts
127.0.0.1 localhost
172.18.0.2 myserver
这意味着您可以在 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
答案 1 :(得分:2)
hostname:
仅设置容器认为自己的主机名的名称。在不寻常的情况下,您会在容器中放入一个外壳,它可能会显示在提示中。它对外面的任何东西都没有影响,通常没有必要进行设置。 (它与主机名(1)基本上具有相同的作用:该命令不会导致主机之外的任何人知道您设置的名称。)
container_name:
设置容器运行时的实际名称,而不是让Docker Compose生成它。如果此名称与services:
中块的名称不同,则两个名称都可用作DNS名称,用于容器间通信。除非您需要使用docker
来管理Compose启动的容器,否则通常也不需要进行设置。
如果您忽略这两个设置,则使用networks:
块的名称和一个容器可以访问另一个容器(只要它们在同一个Docker Compose文件中并且具有兼容的services:
设置)。移植正在监听的容器中的服务。
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