下面是我的dockerfile
FROM node:10.15.0
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY ./build/release /usr/src/app/
RUN yarn
EXPOSE 3000
CMD [ "node", "server.js" ]
首先我跑了
docker build -t app .
然后
docker run -t -p 3000:3000 app
通过我的计算机上的localhost:3000,一切正常。
然后我尝试导出此图像
docker export 68719e2bb0cd > app.tar
然后通过
再次导入cat app.tar | docker import - app2
然后运行 docker run -t -d -p 2000:3000 app2
错误出现了
docker: Error response from daemon: No command specified.
为什么会这样?
答案 0 :(得分:1)
您使用了错误的命令:docker export
和docker import
仅传输映像的文件系统部分,而不传输环境变量或默认命令之类的其他数据。这些命令实际上并没有很好的典型用例。
执行此操作的标准方法是set up a Docker registry或使用公共注册服务器,如Docker Hub,AWS ECR,GCR等。...完成此设置后,可以docker push
镜像到从它所基于的系统中注册,然后docker pull
在您要在其上运行它的系统上(或直接docker run
在它上运行它,如果不存在,它将自动拉出映像)。
如果您确实无法设置注册表,那么您真正想要的命令是docker save
和docker load
,它们会保存完整的图像及其所有元数据。在无法将要运行映像的系统连接到注册表服务器的环境中,每个人都只需要这些。否则,注册表几乎总是更好。 (集群环境(如Docker Swarm和Kubernetes都需要注册)。
答案 1 :(得分:0)
只需传递命令即可运行。因为导入的图像将在导出时丢失其所有关联的元数据,所以在将其导入其他位置后,默认命令将不可用。
正确的命令应类似于: docker run -t -d -p 2000:3000 app2 /path/to/something.sh