Wie man /etc/profile ausgeführt automatisch in die Alpine / Andockfenster
Wie bekomme ich /etc/profile
ausgeführt werden automatisch beim Start einer alpinen Docker-container interaktiv? Ich habe einige Aliase auf eine aliases.sh
- Datei und platziert es in /etc/profile.d
, aber wenn ich starten Sie den Behälter docker run -it [my_container] sh
meine Aliase nicht aktiv. Ich habe manuell eingeben . /etc/profile
von der Befehlszeile aus jeder Zeit.
Gibt es eine andere Konfiguration, die notwendig sind, um /etc/profile
ausführen, bei der Anmeldung? Ich habe auch Probleme mit einem ~/.profile
- Datei. Jede Einsicht wird sehr geschätzt!
EDIT:
Basierend auf VonC Antwort, ich zog und lief seinem Beispiel ruby
container. Hier ist, was ich habe:
$ docker run --rm --name ruby -it codeclimate/alpine-ruby:b42
/ # more /etc/profile.d/rubygems.sh
export PATH=$PATH:/usr/lib/ruby/gems/2.0.0/bin
/ # env
no_proxy=*.local, 169.254/16
HOSTNAME=6c7e93ebc5a1
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
/ # exit
Obwohl die /etc/profile.d/rubygems.sh
- Datei vorhanden ist, wird es nicht laufen, wenn ich login und mein PATH
environment-variable wird nicht aktualisiert. Bin ich mit dem falschen docker run
Befehl? Ist etwas anderes fehlt? Hat jemand bekommen ~/.profile
oder /etc/profile.d/
Dateien arbeiten mit Alpine auf Docker? Danke!
- Haben Sie versucht, die build-Alpine Bilder mit
ADD .profile /etc/.profile
? - Nein, ich habe eigentlich nie gehört, versucht die
/etc/.profile
. Ich habe immer geglaubt, dass.profile
gehört in IhreHOME
Verzeichnis, in der Erwägung, dassprofile
(ohne Punkt) gehört in/etc
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man noch versuchen in Ihre Dockerfile a:
(sofern der aktuelle Benutzer ist
root
. Wenn nicht, ersetzen Sie/root
mit den vollen home-Pfad)Dass gesagt wird, diese /etc/profile.d/xx.sh ausgeführt werden soll.
Sehen
codeclimate/Andockfenster-alpine-ruby
als Beispiel:Mit '
Dateien/etc
" einschließlich einerfiles/etc/profile.d/rubygems.sh
läuft Prima.In der OP-Projekt
Dockerfile
, es ist einAber die Standard-shell ist nicht eine login-shell (sh -l), was bedeutet, dass
Profil
- Dateien (oder solche, die in/etc/profile.d
) sind nicht bezogen.Hinzufügen
sh -l
funktionieren würde:/root/.profile
Datei auch, mit dem gleichen alias-Definitionen bin ich dabei, in der/etc/profile.d/aliases.sh
- Datei. Tatsächlich, das war das erste, was ich versucht habe. Ich dachte, vielleicht es war etwas anderes mitash
undsh
auf Alpine, dass ich fehlte-einige Grund meine.profile
war nicht gelesen. Ich werde einen Blick auf dein Beispiel. Danke!Node
container, wo ich bin mit demaliases.sh
- Datei. Könnte jemand vielleicht ziehen Sie diesen container und sehen, ob die Aliasse und die Farbe prompt richtig arbeiten, wenn Sie login...https://hub.docker.com/r/jkilbride/node-npm-alpine/
codeclimate/docker-alpine-ruby
und hatte die gleichen Probleme. MeinePATH
variable wurde nicht aktualisiert, von derrubygems.sh
Datei in/etc/profile.d
.ls -alrt /etc/profile.d
zu sehen, wenn das sh script auch ausführbar ist oder nicht?rubygems.sh
- Datei ist keine ausführbare Datei, es istrw-rw-r
oder0664
. Ich werde es mal ausprobieren auf meinemaliases.sh
Datei, aber ich bin skeptisch, dass das problem. Diese Dateien sind bezogen mit. filename.sh
im/etc/profile
. Sie sollten nicht brauchen, um lauffähig zu sein. Auch das Beispielcolor_prompt
- Datei, die kommt mitAlpine
ist nicht ausführbar ist. Und keiner meiner Dateien, das anpassen der shell auf anderenLinux
Distributionen lauffähig sind (z.B.git-prompt.sh
,.bash_profile
,.bashrc
, etc...) Die entsprechende Zeile im/etc/profile
istif [ -r $script ]
-- so, es ist Tests für die Lesbarkeit.codeclimate/alpine-ruby
container? Es tut aktualisieren Sie IhrePATH
richtig? Ich Frage mich, ob dies nur ein problem ich bin zu sehen, oder wenn andere es auch. Wenn es mehr als nur mich, ich poste etwas aufalpinelinux.org
.docker run
die funktioniert.docker
, konnte aber nicht finden eine Antwort. Diesh -l
ist, für mich zu arbeiten. Vielen Dank für die Hilfe!Die Standard-shell in Alpine Linux ist
ash
.Asche nur noch Lesen
/etc/profile
und~/.profile
- Dateien, wenn es gestartet wird als login-shellsh -l
.Zwingen Asche zur Quelle der
/etc/profile
oder andere Skript, das Sie möchten auf Ihren Aufruf als nicht-login-shell ist, müssen Sie setup eine Umgebungsvariable namensENV
vor der Einführung in die Asche.z.B. in Ihrem Dockerfile
Wenn Sie bauen, die Sie erhalten:
Schließlich, wenn Sie führen Sie den neu erstellten container:
Beachten Sie die bash-shell nicht als login-shell laufen.
So, Ihre Anfrage zu beantworten, ersetzen
mit:
und Alpine Linux ist die bash-shell wird automatisch ein source /etc/profile-Skript bei jedem Start der shell wird gestartet.
Gotcha: /etc/profile ist normalerweise gemeint, nur bezogen werden, einmal!!!! Also, ich würde raten, dass Sie nicht die Quelle und statt Quelle ein /root/.ein.somercfile statt.
Quelle: https://stackoverflow.com/a/40538356
Wie erwähnt von Jinesh vor, die Standard-shell in Alpine Linux ist die Asche
Daher ist die Lösung einfach zu fügen Sie Ihre Aliase in .Profil. In diesem Fall habe ich alle meine alias in ~/.ash_aliases
.ash_aliases Datei
- Und es funktioniert 🙂