Docker CMD 指令执行

我的 Dockerfile 文件有以下指令

CMD ["luarocks","install",luasocket"]

当我尝试构建镜像时,镜像构建成功,但是 luasocket 尚未安装在我的 docker 中。

但是在我的 docker 上手动执行此语句,先运行 "sudo apt-get update",然后一切都可以顺利进行。

为什么手动执行命令后,就可以正常执行呢?虽然我的 docker 包含 "update" 命令,但在这种情况下为什么会失败呢?

点赞
用户6309
用户6309

如果你在一个容器(也就是在 docker run 之后)中执行了 sudo apt-get update 命令,那么 apt-get 命令所做的任何事情都会在下一次 docker run(下一个容器)时被重置。

如果在你的 Dockerfile 中 luarocks install luasocket 命令需要 apt-get 命令才能顺利完成,那么一定要包含 RUN apt-get update 命令。

更一般地说,这个安装命令 (luarocks install luasocket) 不应该是一个 CMD,而应该是一个 RUN 命令,以便将 luasocket 的安装嵌入到镜像中。

2016-05-11 12:40:24