千家信息网

Docker Compose 配置文件 Docker-Compose.yml 文件详解

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。image指定镜像tag或者ID。示例:image: redisimage: ubuntu:14.04
千家信息网最后更新 2026年11月03日Docker Compose 配置文件 Docker-Compose.yml 文件详解

每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。

image

指定镜像tag或者ID。示例:

image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/postgresqlimage: a4bc65fd

注意,在version 1里同时使用image和build是不允许的,version 2则可以,如果同时指定了两者,会将build出来的镜像打上名为image标签。

build

用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。

注意,在version 1里bulid仅支持值为字符串。version 2里支持对象格式。

build: ./dirbuild:  context: ./dir  dockerfile: Dockerfile-alternate  args:    buildno: 1

context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:
Dockerfile:

ARG buildnoARG passwordRUN echo "Build number: $buildno"RUN script-requiring-password.sh "$password"

docker-compose.yml:

build:  context: .  args:    buildno: 1    password: secretbuild:  context: .  args:    - buildno=1    - password=secret

command

用来覆盖缺省命令。示例:

command: bundle exec thin -p 3000

command也支持数组形式:

command: [bundle, exec, thin, -p, 3000]

links

用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link。示例:

links: - db - db:mysql - redis

使用了别名将自动会在容器的/etc/hosts文件里创建相应记录:

172.17.2.186  db172.17.2.186  mysql172.17.2.187  redis

所以我们在容器里就可以直接使用别名作为服务的主机名。

ports

用于暴露端口。同docker run -p。示例:

ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"

expose

expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose。

expose: - "3000" - "8000"

volumes

挂载数据卷。同docker run -v。示例:

volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro

volumes_from

挂载数据卷容器,挂载是容器。同docker run --volumes-from。示例:

volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw

container:container_name格式仅支持version 2。

environment

添加环境变量。同docker run -e。可以是数组或者字典格式:

environment:  RACK_ENV: development  SESSION_SECRET:environment:  - RACK_ENV=development  - SESSION_SECRET

depends_on

使用 Compose 时,最大的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。
例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。
例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:

ersion: '2'services:  web:    build: .    depends_on:      - db      - redis  redis:    image: redis  db:    image: postgres

注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。

external_links

链接搭配docker-compose.yml文件或者Compose之外定义的服务,通常是提供共享或公共服务。格式与links相似:

external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql

注意,external_links链接的服务与当前服务必须是同一个网络环境。

extra_hosts

添加主机名映射。

extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229

将会在/etc/hosts创建记录:

162.242.195.82  somehost50.31.209.229   otherhost

extends

继承自当前yml文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。

extends:  file: common.yml  service: webapp

service必须有,file可选。service是需要继承的服务,例如web、database。

net

设置网络模式。同docker的--net参数。

net: "bridge"net: "none"net: "container:[name or id]"net: "host"

dns

自定义dns服务器。

dns: 8.8.8.8dns:  - 8.8.8.8  - 9.9.9.9

完整列子:

zookeeper:  image: ce3dc5339ed2  #指定为镜像名称或镜像 ID  privileged: false  restart: always # 默认值为 no ,即在任何情况下都不会重新启动容器;当值为 always 时,容器总是重新启动;当值为 on-failure 时,当出现 on-failure #报错容器退出时,容器重新启动。  log_driver: json-file  #默认的driver是json-file。只有json-file和journald可以通过docker-compose logs显示日志  ports:  - ip::2181/tcp:2181/tcp   #暴露端口信息。   #使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。   # - "3000"   #- "8000:8000"   #- "127.0.0.1:8001:8001"   #注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。  volumes:  - /data/zookeeper/logs/:/zookeeper/logs/  - /data/zookeeper/data/:/zookeeper/data/  - /data/zookeeper/conf/:/zookeeper/conf/ # 挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。  #Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。  #卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。  command: /root/zookeeper.sh   #覆盖容器启动后默认执行的命令。  environment:  -.utf8  - TZ=Asia/Shanghai  #设置环境变量。你可以使用数组或字典两种格式。  #只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。   #environment:   #- RACK_ENV=development   #- SESSION_SECRET        # depends_on   #在使用 Compose 时,最大的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。#例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。  #例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务: #version: '2' #services:  # web:   #  build: .   #  depends_on:   #    - db   #    - redis   #redis:    # image: redis  # db:    # image: postgres          #links #还记得上面的depends_on吧,那个标签解决的是启动顺序问题,这个标签解决的是容器连接问题,与Docker client的--link一样效果,会连接到其它服务中的容器。  #格式如下:  #links:   #- db    #- db:database    #- redis #使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:  #172.12.2.186  db  #172.12.2.186  database  #172.12.2.187  redissso:  image: 698063d64ab5  privileged: false  restart: always  log_driver: json-file  ports:  - 172.16.0.13:7000/tcp:7000/tcp  - 172.16.0.13:10000/tcp:10000/tcp  volumes:  - /data/tomcat/sso/logs/:/tomcat/logs/  - /data/tomcat/sso/server.xml:/tomcat/conf/server.xml  - /data/tomcat/sso/catalina.sh:/tomcat/bin/catalina.sh  - /data/tomcat/sso/sso.properties:/tomcat/webapps/sso/WEB-INF/classes/sso.properties  - /data/webapps/sso/:/tomcat/webapps/sso/  command: /root/tomcat.sh  environment:  -.utf8  - TZ=Asia/Shanghai  - DEBUGPORT=10000  - CATALINA_OPTS=-Djava.security.egd=file:///dev/urandom


容器 服务 格式 数据 文件 标签 示例 端口 路径 问题 别名 镜像 主机 变量 命令 情况 数据库 环境 应用 支持 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 厦门中拓互联网络科技有限公司 腾讯阿里互联网科技 善班互联网科技有限公司 友谊互联网络科技 互联网 视角下的科技创新 兼蜜互联网科技 互联网科技股午盘股票涨跌 深圳市运趣互联网科技有限公司 现代互联网科技股 和信科技工业互联网 互联网科技和信息 徐州市互联网科技有限公司 每天都有哪些好的互联网科技 南通创西澳互联网科技有限公司 启辰互联网科技 美国互联网科技公司 南京一网一红互联网科技有限公司 新氧科技和美国互联网有关系吗 安徽九吞吴互联网科技有限公司 宁波允成互联网科技有限公司 广州为想互联网科技有限公司 互联网科技工作委员会毛军 智能科技公司是互联网公司吗 互联网科技开发公司 互联网科技有限公司 翻译 海南科技产业互联网平台 华服互联网科技官网 洛阳共同富裕互联网科技有限公司 吉林省码上互联网科技电话 瑞安市蟠桃会互联网科技有限公司
0