我正在尝试在 Docker 镜像中创建一个基本的测试文件,如下所示;
FROM alpine as build
RUN cd /opt/bin/ && touch test123
CMD echo "Hello world"
EXPOSE 9005
EXPOSE 9006
所以图像创建成功。 但是当我在部署到本地 Kubernetes 后登录镜像时,“kubectl exec -it”,我在镜像中没有看到这个“test123”文件。 >
我还添加了“ADD /tmp/test/ /opt/”命令,但这也给出了如下所示的错误。服务器上甚至存在 /tmp/test 目录,并且存在几个文件。
Step 3/8 : ADD /tmp/test/ /opt/
ADD failed: file not found in build context or excluded by .dockerignore: stat tmp/test/: file does not exist
Build step 'Execute shell' marked build as failure
Finished: FAILURE
有什么想法吗?谢谢!
答案 0 :(得分:1)
从描述来看,您似乎跳过了各个步骤,而忽略了在命令执行后容器将停止的事实。容器停止后,K8 尝试重新启动它但没有成功,因为该命令将完成并再次停止容器。此外,我认为 kubectl 不适用于此类用例,但您可能有自己的理由,所以我将其留在那里。
考虑到您使用的是 kubectl,我做了一个工作示例
FROM alpine as build
RUN cd /bin && touch test123
CMD echo "Hello world" && sleep 6000
EXPOSE 9005
EXPOSE 9006
变化:
将此 Dockerfile 放入单独的文件夹中,然后在该文件夹中运行
docker build -t hello_world:1.0 .
这将构建名为 hello_world:1.0 的镜像。然后启动K8集群
kubectl run hello --image=hello_world:1.0
现在您将拥有名为“hello”的 pod 和相应的容器,您可以在其中执行。要执行到容器中,请运行:
kubectl exec -i --tty hello -- /bin/sh
这将在容器内启动一个交互式 shell 会话。如果您运行
,您也可以在那里看到您的文件ls /bin
Here 是提供更多信息的文档。
我希望该示例能帮助您解决问题。