Ben docker için yeniyim. Dockerfile'da ENV komutunu kullanarak ortam değişkenlerini ayarlayabildiğimizi öğrendim. Fakat Dockerfile'daki uzun komutlar için bir bash takma adı nasıl ayarlanır?Dockerfile'da docker kapsayıcıları için bash takma adları nasıl ayarlanır?
cevap
Temelde her zaman sizin gibi ekleyerek, do kullanıcının .bashrc
:
FROM foo
RUN echo 'alias hi="echo hello"' >> ~/.bashrc
bu tek interaktif kabukları için çalışacaktır zamanki gibi: oluşturmalısınız etkileşimli olmayan gövdeler için
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
küçük bir betik ve yolunuza koyun, yani:
RUN echo -e '#!/bin/bash\necho hello' > /usr/bin/hi && \
chmod +x /usr/bin/hi
Takma adınız bize aitse es parametreleri (ör. hi Jim
->hello Jim
), sadece "[email protected]"
ekleyin:
RUN echo -e '#!/bin/bash\necho hello "[email protected]"' > /usr/bin/hi && \
chmod +x /usr/bin/hi
Bunun için teşekkürler, etkileşimli olmayan bir kabuk örneği verebilir misiniz? Bu – c24b
Bash takma adını çözmek için ENTRYPOINT ve CMD'yi arıyordum sadece etkileşimli kabuklarda çalışıyor. Sadece küçük bir kabuk betiği oluşturun ve yolunuza bir takma ad olarak aynı etkiyi koyun. Cevabı basit bir örnekle güncelledik. –
Not: https://stackoverflow.com/a/8467449 adresinden daha tutarlı davranış sağlamak için * echo * yerine ** printf ** 'i kullanmalısınız. Yani Printf '#!/Bin/bash \ Necho merhaba'>/usr/bin/hi chmod + x/usr/bin/hi – barraq
Sen girişnoktası kullanabilirsiniz, ancak bu sizin Dockerfile içinde, takma ad için çalışmaz:
ADD dev/entrypoint.sh /opt/entrypoint.sh
ENTRYPOINT ["/opt/entrypoint.sh"]
Sizin entrypoint.sh
#!/bin/bash
set -e
function dev_run()
{
}
export -f dev_run
exec "[email protected]"
(Hızlı kopyalama/yapıştır, üzgünüm)
Bazı Docker görüntüsünün varsayılan giriş noktasını (phusion temel görüntüsü gibi) geçersiz kılabileceğine dikkat edin. –
varolan komut bir takma ad oluşturmak için de ln -s
kullanabilirsiniz:
ln -s $(which <existing_command>) /usr/bin/<my_command>
adlar esasen * çok * uzun zaman için kullanımdan kaldırıldı kabul edilmiştir. Bir fonksiyon kullan. Artık * bir takma ad kullanmanıza gerek yok. 80'lerin sonlarından bu yaklaşımlar nasıl uzun sürüyor? –