[英]docker-compose recreates a running container despite having a different container_name in the docker-compose.yml
[英]docker-compose.yml container_name and hostname
docker-compose.yml
文件中的container_name
有什么用? 我可以将它用作hostname
,它只是docker-compose.yml
文件中的服务名称。
另外,当我在服务下明确写入hostname
时,它是否会覆盖service name
?
hostname:
只设置容器认为它自己的主机名是什么。 在不寻常的情况下,您在容器内有一个外壳,它可能会显示在提示中。 它对外面的任何东西都没有影响,通常也没有设置它的意义。 (它与主机名(1) 的效果基本相同:该命令不会导致主机外的任何内容知道您设置的名称。)
container_name:
设置容器运行时的实际名称,而不是让 Docker Compose 生成它。 如果此名称与services:
中的块名称不同,则这两个名称都可用作容器间通信的 DNS 名称。 除非您需要使用docker
来管理 Compose 启动的容器,否则您通常也不需要设置它。
如果您省略这两个设置,一个容器可以使用services:
的名称访问另一个(前提是它们在同一个 Docker Compose 文件中并且具有兼容的networks:
设置) 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
最简单的答案如下:
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
这意味着您可以在 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
您可以在docker-compose up期间自定义镜像名称以构建和容器名称,您需要在docker-compose.yml文件中提及如下。 它将创建一个具有自定义名称的图像和容器。
version: '3'
services:
frontend_dev:
stdin_open: true
environment:
- CHOKIDAR_USEPOLLING=true
build:
context: .
dockerfile: Dockerfile.dev
image: "mycustomname/sample:v1"
container_name: mycustomname_sample_v1
ports:
- '3000:3000'
volumes:
- /app/node_modules
- .:/app
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.