Docker|Docker 笔记 - 让 docker-compose 命令在任意路径下都能使用
维护 docker harbor 仓库的命令 docker-compose,有个奇(很)怪(low)的默认设定,就是必须在 docker-compose.yml(或者 docker-compose.yml、docker-compose.yaml、compose.yml、compose.yaml 四个文件中任意一个文件)所在的目录中执行才有效。
在任意路径下执行 docker-compose 命令,得到的结果可能是:
[root@k8s-master ~]# docker-compose ps
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, compose.yml, compose.yaml
假如 docker-compose.yml 的位置是:
/data/soft/harbor/docker-compose.yml
此时,进入这个 yml 文件所在的目录,然后再执行 docker-compose 命令就会正常:
[root@k8s-master ~]# cd /data/soft/harbor
[root@k8s-master harbor]# docker-compose ps
NameCommandStatePorts
------------------------------------------------------------------------------------------------------
harbor-core/harbor/harbor_coreUp (health: starting)
harbor-db/docker-entrypoint.shExit 255
harbor-jobservice/harbor/harbor_jobservice...Exit 255
harbor-log/bin/sh -c /usr/local/bin/ ...Up (healthy)127.0.0.1:1514->10514/tcp
harbor-portalnginx -g daemon off;
Exit 255
nginxnginx -g daemon off;
Restarting
redisredis-server /etc/redis.confExit 255
registry/home/harbor/entrypoint.shUp (healthy)5000/tcp
registryctl/home/harbor/start.shExit 255
关于这个默认的设定,目前没找到一个明确的说明或相关资料。猜测可能是两方面的原因,一是这个东西很容易优化,二是 docker harbor 使用人的不多,官方没有动力去优化它。
不管原因是什么,日常使用的时候不可能为了执行一个命令频繁在各个目录间跳来跳去。为了方便维护、提高效率,需要让 docker-compose 命令在任意路径下均可执行。
本文提供一种最简单的办法:通过设置 alias 别名(环境变量)来实现 docker-compose 命令在任意路径下可执行。
Linux 中 alias 命令用来设置指令的别名,通常用于对一些较长的命令进行简化。它的语法格式为:
alias [别名]='原命令 -选项/参数'
例如:
alias ll='ls -lt'
那么让 docker-compose 命令在任意路径下都能使用的设置方法如下:
vim ~/.bashrc,加入一行:
alias docker-compose='cd /data/soft/harbor;
docker-compose'
保存退出,执行:
source ~/.bashrc
查看已经设置的别名列表,此时能看到 docker-compose 已经设置:
[root@k8s-master harbor]# alias -p
alias cp='cp -i'
alias docker-compose='cd /data/soft/harbor;
docker-compose'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
验证:在任意路径下执行 docker-compose 命令发现已经可以正常执行了:
[root@k8s-master harbor]# cd /data/
[root@k8s-master data]# docker-compose ps
NameCommandStatePorts
------------------------------------------------------------------------------------------------------
harbor-core/harbor/harbor_coreUp (health: starting)
harbor-db/docker-entrypoint.shExit 255
harbor-jobservice/harbor/harbor_jobservice...Exit 255
harbor-log/bin/sh -c /usr/local/bin/ ...Up (healthy)127.0.0.1:1514->10514/tcp
harbor-portalnginx -g daemon off;
Exit 255
nginxnginx -g daemon off;
Restarting
redisredis-server /etc/redis.confExit 255
registry/home/harbor/entrypoint.shUp (healthy)5000/tcp
registryctl/home/harbor/start.shExit 255
【Docker|Docker 笔记 - 让 docker-compose 命令在任意路径下都能使用】其他说明:
如果执行 source ~/.bashrc 后还不行,有可能是因为 ~/.bash_profile 文件少了 ~/.bashrc 的配置,将如下配置加入到 ~/.bash_profile 文件中并执行 source ~/.bash_profile 即可(通常不需要添加,默认存在。但使用时间比较久的 Linux 系统有可能会因为管理员经常改环境变量导致环境变量异常或者配置丢失):
# Get the aliases and functions
if [ -f ~/.bashrc ];
then
. ~/.bashrc
fi
推荐阅读
- type_traits源码阅读笔记
- Docker中优化Mysql运行内存的操作
- 程序员|手把手教你用python来制作春联,是时候让你大展身手了
- Spring Boot 保护敏感配置的 4 种方法,让你的系统不再裸奔!!
- 笔记|AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘
- JDBC保姆级学习笔记-Java数据库连接
- 深入理解docker镜像的分层(小白必看)
- docker实现MySQL数据同步的方法
- 极客日报|B站回应“让用户卖隐私换会员”质疑;UI设计软件Figma封停大疆等公司账号;Arch Linux 诞生二十年|极客头条
- 日常小技巧|关于sort函数中的cmp参数的笔记(C++)