杂谈


在使用Docker的时候我就经常性的思考,为什么Docker的配置文件要命名为DOCKERFILE呢?为什么docker-compose的配置文件一定要命名为docker-compose.yml,或者docker-compose.yaml呢?

其实答案也很简单,官方的默认docker-compose的所有指令都是基于当前目录或者父目录下的名为docker-compose.yml、docker-compose.yaml进行操作的。

可以更改为其他的名字,但是需要使用-f参数进行人为指定文件,同时在查看状态、停止等操作时也需要单独指定该文件,具体如下:

实验


指定配置文件后台运行docker-compose:

1
2
3
[root@centos7 ~]# docker-compose -f docker-compose-python.yml up -d
Starting code_redis_1 ... done
Starting code_web_1 ... done

查看当前正在运行的内容:

1
2
3
4
5
[root@centos7 ~]# docker-compose -f docker-compose-python.yml ps
Name Command State Ports
------------------------------------------------------------------------------
code_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
code_web_1 flask run Up 0.0.0.0:5000->5000/tcp

查看环境变量:

1
2
3
4
[root@centos7 ~]# docker-compose -f docker-compose-python.yml run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=7025b3f39866
...

停止由docker-compose创建的服务:

1
2
3
[root@centos7 code]# docker-compose -f docker-compose-python.yml stop
Stopping code_redis_1 ... done
Stopping code_web_1 ... done

那么此时我们试试不使用-f参数指定文件名是什么样子呢:

1
2
3
4
5
6
[root@centos7 ~]# docker-compose stop
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?

Supported filenames: docker-compose.yml, docker-compose.yaml

显而易见,与文章最开始结论一致,不使用-f参数指定文件,docker-compose会默认寻找名为docker-compose.yml 、docker-compose.yaml的配置文件,如果没有找到,则会提示你是否在正确的目录中,所以为了方便,还是请诸君使用默认命名方式吧。