
Hier ist ein Problem. Hier ist ein Teil meiner podman-compose.yml
web:
build: .
args:
USERNAME: ${USERNAME}
GROUPNAME: ${GROUPNAME}
USERID: ${USERID}
GROUPID: ${GROUPID}
depends_on:
- db
environment:
- TERMINFO=/etc/terminfo
- TERM=xterm-256color
- PGHOST=db
- DATABASE_URL=postgresql://db
- PGUSER=postgres
- PGPASSWORD=password
- APP_HOST=web
userns: keep-id
ports:
- "3000:3000"
volumes:
- .:/app:z
Dies ist der Aufruf an den Podman-Composer:
podman-compose up --build-arg USERNAME=$(id -un) --build-arg GROUPNAME=$(id -gn) --build-arg USERID=$(id -u) --build-arg GROUPID=$(id -g)
Das Volume dafür web
soll vom Container und vom Host aus schreibzugänglich sein.
In dieser Konfiguration gehören der entsprechende Ordner im Container und die darin enthaltenen Dateien dem Root-Benutzer. Wenn ich ein „U“-Flag wie dieses hinzufüge: - .:/app:z,U
, wird der Ordner für den Container schreibgeschützt, aber lokal auf dem Host gehört er dem Benutzer mit UID 100999 und GID 100999.
Aber wenn ich den resultierenden Container mit dem Befehl ausführe
podman run -it -v .:/home/lesha:z --userns=keep-id --entrypoint /bin/sh quotes_web:latest
Die Eigentümerschaft ist innerhalb des Containers korrekt und ändert sich auf dem Host nicht. Alles funktioniert wie vorgesehen. Irgendwelche Vorschläge, wie der Composer das Problem beheben kann?
Dies ist eine Docker-Datei:
FROM docker.io/library/ruby:3.0.0-alpine
ARG USERNAME
ARG GROUPNAME
ARG USERID
ARG GROUPID
COPY run_rails.sh /usr/local/bin
RUN chmod +x /usr/local/bin/run_rails.sh
WORKDIR /app
ENV APPPATH='/app'
RUN echo '***' && \
addgroup -g $GROUPID $GROUPNAME && \
adduser -S -u $USERID -G $GROUPNAME -h /home/$USERNAME -s /bin/sh $USERNAME && \
mkdir -p /home/$USERNAME && \
chmod 700 /home/$USERNAME && \
mkdir -p $APPPATH && \
echo "export PATH=$PATH:/home/$USERNAME/.local/share/gem/ruby/3.0.0/bin" >> /home/$USERNAME/.profile && \
echo 'gem: --user-install --env-shebang --no-rdoc --no-ri' >> /home/$USERNAME/.gemrc && \
echo "Change ownership chown -R $USERNAME:$GROUPNAME $APPPATH" && \
chown -R $USERNAME:$GROUPNAME $APPPATH && \
chown -R $USERNAME:$GROUPNAME /home/$USERNAME
USER $USERNAME
ENTRYPOINT ["run_rails.sh"]
EXPOSE 3000
Danke schön!
Antwort1
Mein Fehler. Funktioniert bei mir mit userns_mode: keep-id
stattuserns: keep-id