gpt4 book ai didi

bash - Docker:RUN touch 不会创建文件

转载 作者:IT老高 更新时间:2023-10-28 21:21:47 25 4
gpt4 key购买 nike

在尝试调试 Dockerfile 中的 RUN 语句时,我尝试将输出重定向到绑定(bind)卷 (./mongo/log) 中的文件。

令我惊讶的是,我无法通过 RUN 命令创建文件,也无法使用重定向/附加 (>,>>) 运算符。但是,我能够通过 docker exec -ti mycontainer/bin/sh 登录正在运行的容器并从那里发出命令来执行上述任务。

为什么会发生这种行为?如何触摸 Dockerfile 中的文件/将输出重定向到文件或运行 Dockerfile 的控制台?

这是我的 Dockerfile:

FROM mongo:3.4

#Installing NodeJS
RUN apt-get update && \
apt-get install -y curl && \
curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
apt-get install -y nodejs


#Setting Up Mongo
WORKDIR /var/www/smq
COPY ./mongo-setup.js mongo-setup.js

##for testing
RUN touch /var/log/node.log && /
node --help 2>&1 > /var/log/node.log

##this was the command to debug
#RUN node mongo-setup.js > /var/log/mongo-setup.log 2> /var/log/mongo-setup.error.log

这里是我的 docker-compose.yml 的摘录:

mongodb:
build:
context: ./
dockerfile: ./mongodb-dockerfile
container_name: smqmongodb
volumes:
- /var/lib/mongodb/data
- ./mongo/log/:/var/log/
- ../.config:/var/www/.config

最佳答案

您在构建过程中这样做:

RUN touch /var/log/node.log && /
node --help 2>&1 > /var/log/node.log

文件 /var/log/node.log 被创建并固定到生成的图像中。

然后你用这个卷挂载运行容器:

volumes:
- ./mongo/log/:/var/log/

./mongo/log/ 中的任何内容都作为 /var/log 挂载在容器中,这会隐藏之前的内容(从图像中)。这就是让它看起来像你的 touch 没有工作的事情(即使它可能工作正常)。

您正在考虑这个问题 - 您的卷安装不会将容器的 /var/log 版本暴露在外部 - 它会替换那里的任何内容。

您在 Dockerfile(构建)中所做的任何事情都不会出现在外部挂载中。

关于bash - Docker:RUN touch 不会创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41412807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com