如何在启动/运行Docker容器之前将文件复制到其中?

17

我从一个已经构建好的Docker镜像开始。

我想要实现以下操作:

  1. 从该镜像创建一个Docker容器(不启动)
  2. 将文件复制到该容器中
  3. 启动该容器

如何实现?如果我运行以下命令,该文件似乎不会出现在容器中:

  1. docker create --name my_container my_image
  2. docker cp file my_container:/tmp/file
  3. docker start my_container

有任何想法如何实现此操作吗?


2
像 https://github.com/docker/docker/pull/14429 这样的 PR 显示它应该可以工作。https://dev59.com/E47da4cB1Zd3GeqP_EcW#32126677 也是如此。 - VonC
4个回答

13
你需要从已构建的Dockerfile中继承一个新的映像,然后使用COPY标签创建一个新的映像: Dockerfile
FROM my_image
COPY file /tmp/file

最后,构建新的Dockerfile:
$ docker build -t new_image .

3
这个答案和这里的答案都有效。https://dev59.com/E47da4cB1Zd3GeqP_EcW#32126677 - Abhijith

0

创建一个目录(例如init),将您的SQL或Shell脚本放入其中。 将该目录~/init绑定挂载到/docker-entrypoint-initdb.d/。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
我曾经使用过这个选项,但我不建议在生产环境中使用它。你可以将它作为外部卷挂载,例如 -v /path/yourlocalfolder:/path/inside/container,这对文件或文件夹都适用。

0
不完全回答了问题,但也可以将所需的文件挂载到容器中。如果文件在Docker容器中不存在,它将在容器内部创建;如果文件已存在,则会被替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接