首页 > 解决方案 > 如何访问卷的主机目录名称?

问题描述

我正在处理一个对 Lua 项目进行 lints 的 Docker 映像,容器可以通过卷访问该映像,Dockerfile看起来像这样(它的相关部分):

FROM debian:bullseye-slim
SHELL ["/bin/bash", "-O", "globstar", "-c"]

COPY --from=builder /usr/local/bin /usr/local/bin
COPY lint.sh /

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install --no-install-recommends gcc=4:10.2.1-1 luarocks=2.4.2+dfsg-1.1 -y && \
    rm -rf /var/lib/apt/lists/* && \
    luarocks install luacheck

CMD PROJECT_DIRECTORY=$(ls -d */ | grep -vE "bin|boot|dev|etc|home|lib|lib64|media|mnt|opt|proc|root|run|sbin|srv|sys|tmp|usr|var") && \
    cd $PROJECT_DIRECTORY && \
    stylua ./**/*.lua && \
    lua-format -i ./**/*.lua && \
    luacheck ./**/*.lua && \
    selene ./**/*.lua

一旦构建了镜像,容器就会像这样被调用:

docker run -v $PWD:/<any-directory> <image>

问题是,我目前不知道<any-directory>从容器内部获取名称,并且我不想在运行容器时为此传递额外的参数,有什么实用的方法来完成这样的事情吗?

标签: dockerdockerfiledocker-volume

解决方案


通常,在构建映像时,容器路径或容器进程将侦听的端口等属性是固定的。作为图像维护者,您可以选择任何您想要的路径;Docker 容器中的典型选择是/app. 在 Dockerfile 中,您可以指定

WORKDIR /app

并假设目录名称是固定的;如果您确实需要在那里绑定安装某些东西,那么使用该图像的任何人都将始终用作选项/app的后半部分docker run -v


推荐阅读