[bash] Dockerfile에서 Docker 컨테이너에 대한 bash 별칭을 설정하는 방법은 무엇입니까?
나는 도커를 처음 사용합니다. Dockerfile에서 ENV 명령을 사용하여 환경 변수를 설정할 수 있음을 발견했습니다. 그러나 Dockerfile에서 긴 명령에 대한 bash 별칭을 어떻게 설정합니까?
답변
기본적으로 항상 그렇듯이 사용자의 .bashrc
:
FROM foo
RUN echo 'alias hi="echo hello"' >> ~/.bashrc
평소와 같이 대화 형 셸에서만 작동합니다.
docker build -t test .
docker run -it --rm --entrypoint /bin/bash test hi
/bin/bash: hi: No such file or directory
docker run -it --rm test bash
$ hi
hello
비대화 형 셸의 경우 작은 스크립트를 만들어 경로에 넣어야합니다. 예 :
RUN echo -e '#!/bin/bash\necho hello' > /usr/bin/hi && \
chmod +x /usr/bin/hi
별칭이 매개 변수를 사용하는 경우 (예 : hi Jim
-> hello Jim
) "$@"
다음을 추가하십시오 .
RUN echo -e '#!/bin/bash\necho hello "$@"' > /usr/bin/hi && \
chmod +x /usr/bin/hi
답변
기존 명령의 별칭을 만들려면 ln -s
다음 을 사용할 수도 있습니다 .
ln -s $(which <existing_command>) /usr/bin/<my_command>
답변
Dockerfile에서만 별칭을 사용하고 컨테이너 내부에는 사용하지 않으려는 경우 가장 짧은 방법은 ENV
선언입니다.
ENV update='apt-get update -qq'
ENV install='apt-get install -qq'
RUN $update && $install apt-utils \
curl \
gnupg \
python3.6
그리고 이미 설명한 것과 같은 방식으로 컨테이너에서 사용합니다.
RUN printf '#!/bin/bash \n $(which apt-get) install -qq $@' > /usr/bin/install
RUN chmod +x /usr/bin/install
대부분의 경우 건물 단계에서 별칭을 사용하고 컨테이너 내부로 들어 가지 않으므로 첫 번째 예는 매일 사용하는 데 더 빠르고 명확하며 간단합니다.
답변
방금 내 app.dockerfile에 추가했습니다.
# setup aliases
ADD ./bashrc_alias.sh /usr/sbin/bashrc_alias.sh
ADD ./initbash_profile.sh /usr/sbin/initbash_profile
RUN chmod +x /usr/sbin/initbash_profile
RUN /bin/bash -C "/usr/sbin/initbash_profile"
그리고 내부에 initbash_profile.sh
있는 단지 내 사용자 지정 별칭과의 .bashrc 파일을 소스 필요가 없습니다를 추가합니다.
# add the bash aliases
cat /usr/sbin/bashrc_alias.sh >> ~/.bashrc
치료를했다!
또 다른 옵션은 컨테이너 외부에서 “docker exec -it 명령”을 사용하고 자신의 .bashrc 또는 .bash_profile (원하는대로)을 사용하는 것입니다.
예. docker exec -it docker_app_1 bash
답변
진입 점을 사용할 수 있지만 Dockerfile에서 별칭에 대해서는 작동하지 않습니다.
ADD dev/entrypoint.sh /opt/entrypoint.sh
ENTRYPOINT ["/opt/entrypoint.sh"]
너의 entrypoint.sh
#!/bin/bash
set -e
function dev_run()
{
}
export -f dev_run
exec "$@"
(빠른 복사 / 붙여 넣기, 죄송합니다)
답변
가장 쉬운 방법은 별칭을 포함하는 컨테이너에 파일을 마운트 한 다음 bash가 찾을 위치를 지정하는 것입니다.
docker run \
-it \
--rm \
-v ~/.bash_aliases:/tmp/.bash_aliases \
[image] \
/bin/bash --init-file /tmp/.bash_aliases
샘플 사용법 :
user@cobalt:~$ echo 'alias what="echo it works"' > my_aliases
user@cobalt:~$ docker run -it --rm -v ~/my_aliases:/tmp/my_aliases ubuntu:18.04 /bin/bash --init-file /tmp/my_aliases
root@565e4a1bdcc0:/# alias
alias what='echo it works'
root@565e4a1bdcc0:/# what
it works
답변
- 이 파일을 편집하십시오 ~ / .bash_aliases
vi ~/.bash_aliases
- 소스이 파일 ~ / .bash_aliases
source ~/.bash_aliases
- 끝난.