触摸命令不影响 Docker 图片
Touch command is not affecting Docker image
我正在尝试在 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
有什么想法吗?谢谢!
从描述来看,您似乎跳过了多个步骤,并且忽略了容器将在命令执行后停止这一事实。容器停止后,K8 尝试重新启动它但没有成功,因为该命令将完成并再次停止容器。另外,我认为 kubectl 不适合这种用例,但你可能有你的理由,所以我就把它留在那里。
考虑到你使用的是kubectl,我做了一个工作示例
FROM alpine as build
RUN cd /bin && touch test123
CMD echo "Hello world" && sleep 6000
EXPOSE 9005
EXPOSE 9006
变化:
- /bin 文件夹的路径不正确。所以我修好了。
- 为了避免容器停止,我添加了睡眠命令来保持它。
将此 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 是进一步信息的文档。
希望该示例对您的问题有所帮助。
我正在尝试在 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
有什么想法吗?谢谢!
从描述来看,您似乎跳过了多个步骤,并且忽略了容器将在命令执行后停止这一事实。容器停止后,K8 尝试重新启动它但没有成功,因为该命令将完成并再次停止容器。另外,我认为 kubectl 不适合这种用例,但你可能有你的理由,所以我就把它留在那里。
考虑到你使用的是kubectl,我做了一个工作示例
FROM alpine as build
RUN cd /bin && touch test123
CMD echo "Hello world" && sleep 6000
EXPOSE 9005
EXPOSE 9006
变化:
- /bin 文件夹的路径不正确。所以我修好了。
- 为了避免容器停止,我添加了睡眠命令来保持它。
将此 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 是进一步信息的文档。
希望该示例对您的问题有所帮助。