我们将使用 docker 在没有出站互联网访问的环境中部署我们的代码库。但是,我们似乎无法预先构建整个内容,因此我们不必从任何存储库中提取图像。服务器已准备好 docker 和 docker-compose。
我们有一个docker-compose.yml
文件,它比这个长很多,但这是我们无法处理的部分:
node:
container_name: my-node
build: ./docker/node
volumes_from:
- volumes_source
ports:
- "5000:5000"
links:
- mysql
- redis
在 /docker/node 中我们有一个 Dockerfile:
FROM node:latest
EXPOSE 5000
RUN npm install pm2 -g
CMD ["pm2-docker", "/var/www/laravel/socket/socket.js"]
我想预先构建它,这样它就不必运行位npm install pm2 -g
- 因为它不会工作。我尝试过的是:
- 将其作为容器在连接互联网的主机上启动
docker commit 8671bf3bd1b5 my-node:latest
(8671bf3bd1b5 是容器 ID)docker save -o my-node.docker my-node:latest
docker export 8671bf3bd1b5 > my-node_latest.tar
- 将文件传输至离线环境
docker load -i my-node.docker
cat my-node_latest.tar | docker import - my-node:latest
- 在离线环境中从 docker-compose.yml 中删除
build: ./docker/node
并替换为image: my-node:latest
它仍然尝试拉取 node:latest 并运行npm install pm2 -g
。我们做错了什么?
答案1
是的,您已导出名为 my-node:latest 的镜像/容器。但在 Dockerfile 中,它是基于您忘记导出的 node:latest 构建的。...