我有一个运行在docker容器中的Telegram机器人的容器,该容器是通过以下Dockerfile构建的:
FROM debian:stretch
RUN apt-get -qq update && apt-get -qq install -y g++ make binutils cmake libssl-dev libboost-sysstem-dev libcurl4-openssl-dev zlib1g-dev
WORKDIR /usr/src/tgbot-cpp
COPY include include
COPY src src
COPY CMakeLists.txt ./
RUN cmake .
# ...
Dockerfile放置在/home/me/docks/tbot/Dockerfile
中。
但是,现在我想稍微整理一下文件,即将include
,src
和CMakeLists.txt
放在一个名为containerBuildFiles
的子文件夹中(绝对: home/me/docks/tbot/containerBuildFiles
),我执行以下操作:
docker-compose down
Dockerfile
:# ...
[-] COPY include include
[-] COPY src src
[-] COPY CMakeLists.txt ./
[+] COPY containerBuildFiles ./
# ...
mkdir containerBuildFiles
mv -t containerBuildFiles include src CMakeLists.txt
docker-compose build --no-cache --force-rm --pull
哪个给我以下输出:
[...]
Step 5/8 : COPY containerBuildFiles ./
ERROR: Service 'tgbot' failed to build: COPY failed: stat /home/docker/tmp/docker-builder654813864/containerBuildFiles: no such file or directory
现在,当我撤消在Dockerfile
和目录结构中所做的更改时,一切都恢复正常。
我还尝试将Dockerfile
中的路径从containerBuildFiles
更改为./containerBuildFiles
。 /home/me/docks/tbot/containerBuildFiles
(我知道这是一种不好的做法,但我想尝试一下),或者只是运行docker build . -t tbot_test --no-cache
,结果相同。
我的想法是,docker-compose上下文可能未正确更新。显然,来自Docker容器的文件未正确复制到/home/docker/tmp
文件夹中。
所以现在我的问题是:如何更新docker-compose上下文,以便将更新后的文件夹再次正确地传递到docker容器的创建中?
非常感谢您的帮助。
答案 0 :(得分:1)
通过删除.dockerignore
文件解决了该问题。
[编辑]
原因:.dockerignore
文件中的行忽略了不是include
,src
或文件CMakeLists.txt
的每个文件夹:
!include
!src
!CMakeLists.txt
所以它们没有被复制。