首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件挂载为目录,而不是docker- in -docker (dind)中的文件

将文件挂载为目录,而不是docker- in -docker (dind)中的文件
EN

Stack Overflow用户
提问于 2019-09-10 16:46:25
回答 1查看 203关注 0票数 0

当运行此命令docker run --rm -v $(pwd)/api_tests.conf:/usr/config/api_tests.conf --name api-automation local.artifactory.swg-devops.com/api-automation时,api_tests.conf文件将作为目录挂载到容器中,而不是作为文件。

我检查了Single file volume mounted as directory in Docker和其他几个关于堆栈溢出的类似问题,但无法获得正确的解决方案。

我已经在本地mac笔记本电脑上测试了相同的代码,这里的文件从本地机器挂载到容器中作为一个文件,但在本地我没有docker- in -docker设置。

我的Dockerfile如下所示。

代码语言:javascript
复制
FROM alpine:latest
MAINTAINER Basavaraj 
RUN apk add --no-cache python3 \
    && pip3 install --upgrade pip
WORKDIR /api-automation
COPY . /api-automation
RUN pip --no-cache-dir install .
ENTRYPOINT "some command"

我有如下的build.sh文件,

代码语言:javascript
复制
#!/bin/bash
docker pull local.artifactory.swg-devops.com/api-automation

# creating file with name "api_tests.conf" by adding configuration data
echo "configuration data" > api_tests.conf

# it displays all the configuration data written to api_tests.conf
cat $(pwd)/api_tests.conf

docker run --rm -v $(pwd)/api_tests.conf:/usr/.aiops/config/api_tests.conf --name api-automation local.artifactory.swg-devops.com/api-automation

现在我们从gocd环境中调用build.sh文件。看起来像在docker- in - docker (dind)中执行的docker run命令,因此客户端在不同的主机上生成docker容器,并且正在创建的文件(api_tests.conf)在该不同的主机上不存在。由于此文件(api_tests.conf)在容器中作为空目录挂载。

在docker- in -docker环境中挂载文件有哪些不同的解决方案?我们是否可以共享我们创建的文件(api_tests.conf)来托管docker容器的派生位置?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 20:28:53

我认为您遇到的问题很可能是因为使用了dind,尽管值得指出的是,如果您将docker socket也挂载到另一个容器中,也会出现此问题。

这是因为当您请求docker守护进程挂载目录时,您实际上是docker客户端(cli)挂载文件/目录本身,它只是将一个请求传递给docker守护进程以从其本地文件系统挂载此位置。这就是问题所在,因为如果您使用dind或共享docker.socket,通常情况下,这不是您认为的位置,因此从守护进程的角度来看,文件/目录不存在。

因此,在您的示例中,$(pwd)可能会被展开到某个众所周知的/现有目录路径,然后docker守护进程将挂载此目录部分,因为该文件不存在。这至少是我的猜测,因为我以前在其他设置中使用dind/docker.socket共享时也看到过类似的行为。

一种疯狂的解决方案是在启动时将所需的文件绑定挂载到dind容器中,然后可以尝试将这些文件从dind容器中绑定挂载到任何后续容器中。但是请记住,由于不稳定和潜在的数据丢失,dind文档中对这种文件系统的使用提出了警告,因此要加以警告。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57867130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档