Docker - 无法使用入口点从导入的映像运行容器

kle*_*dis 0 docker

我有一个官方的MySQL容器.我做

docker export <cont_name> > ~/Desktop/mysql.tar
Run Code Online (Sandbox Code Playgroud)

接下来我做

sudo tar -c ~/Desktop/mysql.tar | docker import --change "ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" --change "ENV MYSQL_MAJOR 5.7" --change "ENV MYSQL_VERSION 5.7.8-rc" --change "ENTRYPOINT [\"/entrypoint.sh\"]" --change "EXPOSE 3306" --change "VOLUME /var/lib/mysql" --change "CMD [\"mysqld\"]" - mysql:kyriakos
Run Code Online (Sandbox Code Playgroud)

最后

docker run --env "MYSQL_ROOT_PASSWORD=root" --name mysql_kyr mysql:kyriakos
Run Code Online (Sandbox Code Playgroud)

我明白了

exec: "/entrypoint.sh": stat /entrypoint.sh: no such file or directory
Error response from daemon: Cannot start container a15613493ee94a159ff0821974742350ae5df26b0f659932dc7cb3264295e944: [8] System error: exec: "/entrypoint.sh": stat /entrypoint.sh: no such file or directory
Run Code Online (Sandbox Code Playgroud)

我输入的内容有问题吗?在.tar文件中/entrypoint.sh似乎存在..

谢谢

lar*_*sks 5

你认为这到底是做什么的?

sudo tar -c ~/Desktop/mysql.tar | docker import
Run Code Online (Sandbox Code Playgroud)
  • 你不需要sudo,因为你刚刚在你的主目录中创建了这个文件.
  • 已经是一个tar文件了.通过使用tar -c您正在创建一个新的 tar存档,其内容是mysql.tar.你正在传递给他们docker import.
  • 这会为您提供包含单个文件的图像mysql.tar,因此您当然会收到有关/entrypoint.sh不存在的错误.

我觉得你真正想要的是:

docker import --change "ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
  --change "ENV MYSQL_MAJOR 5.7" \
  --change "ENV MYSQL_VERSION 5.7.8-rc" \
  --change "ENTRYPOINT [\"/entrypoint.sh\"]" \
  --change "EXPOSE 3306" \
  --change "VOLUME /var/lib/mysql" \
  --change "CMD [\"mysqld\"]" - mysql:kyriakos < mysql.tar
Run Code Online (Sandbox Code Playgroud)

真正想要的是使用Dockerfile,而不是这个奇怪的导出/导入管道.

FROM mysql

ENV MYSQL_MAJOR 5.7
ENV MYSQL_VERSION 5.7.8
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3306
VOLUME /var/lib/mysql
CMD ["mysqld"]
Run Code Online (Sandbox Code Playgroud)