【问题标题】:How can I copy files to a docker container when error happened:Nosuch container?发生错误时如何将文件复制到 docker 容器:没有这样的容器?
【发布时间】:2017-11-29 10:58:11
【问题描述】:

我是docker新手,如果有什么不对的地方请指出,谢谢~

我的目标是在 docker 中运行由我或我所属的团队开发的 Web 服务器。

所以,我想出了三个步骤:

有一个图像,将网络文件复制到其中,然后运行容器。所以,我执行以下步骤:

1- 获取 docker 镜像。

我尝试这样:docker pull centos,这样我就可以得到基于centos的图像。这里,我不关心centos的版本,当然,它的版本是6.7或者,只是标记:最新的。

这里,我通过docker images查看图片,我可以看到它是这样的:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              d123f4e55e12        3 weeks ago         196.6 MB

所以,我认为这一步成功了。

2-尝试将本地系统中的文件复制到容器中。

我停在路径:/tornado,其中有一个名为 fordocker 的文件夹。

fordocker 包含网络服务器文件。

我尝试这样的commands(基于指南):

docker cp fordocker/ d123f4e55e12:/web

但是!错误来了:

Error response from daemon: No such container: d123f4e55e12

3- 如果我复制文件成功,我可以这样尝试:docker run -d centos xxx python web.py

这一步会出错吗?我还不知道。

我查了很多,但没有解释这个现象。

似乎除了我之外的每个人都使用command会成功。

那么,问题来了:

1- 我想出来的方法可行吗?我必须通过个人资料创建图像吗?

2- 如果方法可行,错误在哪里?普通cp是不是基于我没做过的其他事情?

3- 如果方法不可行怎么办?自己创建图像?

祝你有美好的一天~

【问题讨论】:

    标签: docker centos


    【解决方案1】:

    你有 docker 镜像和 docker 容器。那是不一样的。

    您拉取或构建图像。

    当你启动一个镜像时,它会变成一个正在运行的容器。

    图像不是一个正在运行的容器,因此,您将无法在图像中复制文件。

    我不知道这是不是你想做的,但你可以

    1) 启动图像

    docker run ...

    2) 复制或修改文件

    docker ps

    显示您正在运行的容器,因此您可以

    docker cp...

    这个正在运行的容器中的一个文件

    3) 可以将修改后的图像保存为

    docker commit...

    但是通常,如果你想修改一个镜像,你修改 Dockerfile,这样你就可以很容易地用这样的命令构建一个新的镜像

    docker build -t myuser/myimage:321 .

    注意最后一个点,它表示您使用的是本地的 Dockerfile。

    参见例如 Nginx 的 Dockerfile

    https://github.com/nginxinc/docker-nginx/blob/c8bfb9b5260d4ad308deac5343b73b027f684375/mainline/stretch/Dockerfile

    【讨论】:

    • 早上好,很荣幸在我的一天开始时得到您的答复。确切地说,我没有对图像和容器进行区分。和以前一样,我只是认为图像是服务器中的容器,它们的不同之处在于它是否在我的计算机中。当然,经过你的解释,我知道我想错了。到手,我只是想尝试通过docker部署一个python web项目,指南告诉了两种方法。首先,出生一个Dcokerfile。其次,拉一个图像并尝试更改它并保存。非常感谢。
    【解决方案2】:

    我的目标是通过docker部署一个python web项目,我想到的第一个方法是:将服务器文件复制到容器中,然后用python ***.py运行。

    但我没有得到图像和容器之间的区别。

    另外,我还有一些其他方法:

    1- 构建一个 Dcokerfile。通过这种方式,我们可以在没有其他command(如python ***.py)的情况下运行图像,因为我们可以将command写入Dcokerfile。

    2-获取一个具有正确python版本的图像,并尝试docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python helloworld.py,但不需要将文件复制到容器中。

    如果我能掌握所有方法,我会选择构建Dcokerfile?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2019-07-14
    • 2021-03-28
    • 1970-01-01
    • 2020-01-03
    • 2018-07-01
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多