保护 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
Name Command State Ports
------------------------------------------------------------------------------------------------------
harbor-core /harbor/harbor_core Up (health: starting)
harbor-db /docker-entrypoint.sh Exit 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-portal nginx -g daemon off; Exit 255
nginx nginx -g daemon off; Restarting
redis redis-server /etc/redis.conf Exit 255
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Exit 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
Name Command State Ports
------------------------------------------------------------------------------------------------------
harbor-core /harbor/harbor_core Up (health: starting)
harbor-db /docker-entrypoint.sh Exit 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-portal nginx -g daemon off; Exit 255
nginx nginx -g daemon off; Restarting
redis redis-server /etc/redis.conf Exit 255
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Exit 255
其余阐明:
如果执行 source ~/.bashrc 后还不行,有可能是因为 ~/.bash_profile 文件少了 ~/.bashrc 的配置,将如下配置退出到 ~/.bash_profile 文件中并执行 source ~/.bash_profile 即可(通常不须要增加,默认存在。但应用工夫比拟久的 Linux 零碎有可能会因为管理员常常改环境变量导致环境变量异样或者配置失落):
# Get the aliases and functions
if [-f ~/.bashrc]; then
. ~/.bashrc
fi