Docker-挂载目录';所有者和组
我运行了一个docker容器,将主机目录绑定到容器目录,但是容器目录及其文件的权限根据主机的不同而不同Docker-挂载目录';所有者和组,docker,permissions,vlc,docker-volume,vlc-android,Docker,Permissions,Vlc,Docker Volume,Vlc Android,我运行了一个docker容器,将主机目录绑定到容器目录,但是容器目录及其文件的权限根据主机的不同而不同 docker run -w /vlc-android -v $(pwd)/vlc-android:/vlc-android --rm vlc-android:latest bash -c "ls -ld /vlc-android" Mac OS 10.14.6(Docker桌面版本2.1.0.3)上的结果 drwxr-xr-x 2可视局域网可视局域网64 Sep 27 04:34/vlc a
docker run -w /vlc-android -v $(pwd)/vlc-android:/vlc-android --rm vlc-android:latest bash -c "ls -ld /vlc-android"
Mac OS 10.14.6(Docker桌面版本2.1.0.3)上的结果
drwxr-xr-x 2可视局域网可视局域网64 Sep 27 04:34/vlc android
Ubuntu服务器18.04.3上的结果
drwxr-xr-x 2根目录4096年9月27日06:11/vlc android
我正在尝试构建VLC播放器android应用程序。从via或以下路径
FROM debian:stretch-20190506
MAINTAINER VideoLAN roots <roots@videolan.org>
ENV IMAGE_DATE=201907171600
ENV ANDROID_NDK="/sdk/android-ndk" \
ANDROID_SDK="/sdk/android-sdk-linux"
# If someone wants to use VideoLAN docker images on a local machine and does
# not want to be disturbed by the videolan user, we should not take an uid/gid
# in the user range of main distributions, which means:
# - Debian based: <1000
# - RPM based: <500 (CentOS, RedHat, etc.)
ARG VIDEOLAN_CI_UID=499
RUN addgroup --quiet --gid ${VIDEOLAN_CI_UID} videolan && \
adduser --quiet --uid ${VIDEOLAN_CI_UID} --ingroup videolan videolan && \
echo "videolan:videolan" | chpasswd && \
apt-get update && \
apt-get install --no-install-suggests --no-install-recommends -y \
openjdk-8-jdk-headless ca-certificates autoconf m4 automake ant autopoint bison \
flex build-essential libtool libtool-bin patch pkg-config ragel subversion \
git rpm2cpio libwebkitgtk-1.0-0 yasm ragel g++ protobuf-compiler gettext \
libgsm1-dev wget expect unzip python python3 locales libltdl-dev curl && \
echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/stretch-backports.list && \
apt-get update && apt-get -y -t stretch-backports install cmake && \
rm -f /etc/apt/sources.list.d/stretch-backports.list && \
echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list && \
apt-get update && apt-get -y -t testing --no-install-suggests --no-install-recommends install automake && \
rm -f /etc/apt/sources.list.d/testing.list && \
apt-get clean -y && rm -rf /var/lib/apt/lists/* && \
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
echo "export ANDROID_NDK=${ANDROID_NDK}" >> /etc/profile.d/vlc_env.sh && \
echo "export ANDROID_SDK=${ANDROID_SDK}" >> /etc/profile.d/vlc_env.sh && \
mkdir sdk && cd sdk && \
wget -q https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip && \
ANDROID_NDK_SHA256=4f61cbe4bbf6406aa5ef2ae871def78010eed6271af72de83f8bd0b07a9fd3fd && \
echo $ANDROID_NDK_SHA256 android-ndk-r18b-linux-x86_64.zip | sha256sum -c && \
unzip android-ndk-r18b-linux-x86_64.zip && \
rm -f android-ndk-r18b-linux-x86_64.zip && \
ln -s android-ndk-r18b android-ndk && \
mkdir android-sdk-linux && \
cd android-sdk-linux && \
mkdir "licenses" && \
echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" > "licenses/android-sdk-license" && \
echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> "licenses/android-sdk-license" && \
wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip && \
SDK_TOOLS_SHA256=444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0 && \
echo $SDK_TOOLS_SHA256 sdk-tools-linux-3859397.zip | sha256sum -c && \
unzip sdk-tools-linux-3859397.zip && \
rm -f sdk-tools-linux-3859397.zip && \
tools/bin/sdkmanager "build-tools;26.0.1" "platform-tools" "platforms;android-26" && \
chown -R videolan /sdk
ENV LANG en_US.UTF-8
USER videolan
RUN git config --global user.name "VLC Android" && \
git config --global user.email buildbot@videolan.org
我希望用户id“videolan”是容器目录“/vlc android”的所有者id,容器中的所有文件都在Ubuntu服务器18.04.3上运行,比如“Mac OS 10.14.6(Docker desktop版本2.1.0.3)”上的结果
如何操作?在linux上装载卷时,docker容器中生成的文件夹将获得与主机上文件夹相同的权限。如果主机上的文件夹归root所有,则docker容器内的文件夹也归root所有 要解决问题,您必须更改
$(pwd)/vlc android
的所有者,以匹配容器中使用的用户id(根据您在问题中附加的Dockerfile,UID为499)
尝试执行以下操作:
sudo chown 499 -R $(pwd)/vlc-android
然后重新启动容器
编辑: 另一个解决方案是,如果您能够在ubuntu服务器上重建docker映像,则重新生成映像以使用文件夹所有者id而不是499 您只需获取文件夹所有者ID(尽量避免使用root用户): 并使用以下命令重新生成docker映像:
USER_ID=1000
docker build \
-t my_new_vlc_androing_thingy \
--build-arg VIDEOLAN_CI_UID=${USER_ID} \
.
并使用以下工具运行它:
docker run --rm \
-w /vlc-android \
-v $(pwd)/vlc-android:/vlc-android \
my_new_vlc_androing_thingy \
bash -c "ls -ld /vlc-android"
在linux上装载卷时,docker容器中生成的文件夹将获得与主机上的文件夹相同的权限。如果主机上的文件夹归root所有,则docker容器内的文件夹也归root所有 要解决问题,您必须更改
$(pwd)/vlc android
的所有者,以匹配容器中使用的用户id(根据您在问题中附加的Dockerfile,UID为499)
尝试执行以下操作:
sudo chown 499 -R $(pwd)/vlc-android
然后重新启动容器
编辑: 另一个解决方案是,如果您能够在ubuntu服务器上重建docker映像,则重新生成映像以使用文件夹所有者id而不是499 您只需获取文件夹所有者ID(尽量避免使用root用户): 并使用以下命令重新生成docker映像:
USER_ID=1000
docker build \
-t my_new_vlc_androing_thingy \
--build-arg VIDEOLAN_CI_UID=${USER_ID} \
.
并使用以下工具运行它:
docker run --rm \
-w /vlc-android \
-v $(pwd)/vlc-android:/vlc-android \
my_new_vlc_androing_thingy \
bash -c "ls -ld /vlc-android"
谢谢这么好的工作!但还是。。。当我在Ubuntu上使用
--mount
运行它时,容器中的文件夹获得与您告诉我的主机相同的权限。但是使用-v
,生成的文件夹所有者是“root”,并且主机不属于root。chown必须在主机上执行,而不是在容器上执行。在本例中,--mount和--volume的行为没有什么不同。在这两种情况下,他们都从主机获得文件夹/文件所有权。添加了另一种可能的解决方案好主意!谢谢:)谢谢!这么好的工作!但还是。。。当我在Ubuntu上使用--mount
运行它时,容器中的文件夹获得与您告诉我的主机相同的权限。但是使用-v
,生成的文件夹所有者是“root”,并且主机不属于root。chown必须在主机上执行,而不是在容器上执行。在本例中,--mount和--volume的行为没有什么不同。在这两种情况下,他们都从主机获得文件夹/文件所有权。添加了另一种可能的解决方案好主意!谢谢:)