docker run -p5001(本地的端口):5000(docker里边的端口) -d --name mojigo-api3(可替换) 2a0e68b7f609(docker 打包成功的那个命令)
docker images 看docker打包的镜像有几个的
docker ps 看当前有几个成功启动的
docker ps -a 看历史有几个要启动的docker 没有成功启动的也算
dockerr stop 容器ID 停掉docker的
docker build -t mojigo-api:v4 . (这个好像是得在项目根目录下执行的)
docker logs --since 30m fa8447468fb0(docker的container id) 可以看启动的日志,比如哪错了之类的,这个是看30分钟内的log日志
docker -compose 不知道啥
记录一下,项目打包的流程,按照正常的打包流程,打包,然后进入这个镜像里,修改一些东西
上图,CONTANER ID是run的docker的id, IMAGE是用build命令打包的那个docker包的id, 一个项目,你先用build,根据dockerfile来打包成镜像文件,这个时候只有IMAGE ID,要查看自己的所有的镜像文件,用docker images命令来查看。然后你要启动一个镜像文件,就用docer run去运行IMAGE的id号,不管成功没成功,都会生成一个CONTAINER ID 号。docker ps是看运行起来的,docker ps -a是看启动过的
(
docker ps -a 列出所有run过的docker
docker exec -it CONTAINER ID /bin/bash 这个是进入这个打包后的容器里边,往里边添加一些东西和修改一些东西,没有run起来的,进不去
exit 就是退出在这个docker
docker commit CONTAINER ID 这个是再次打包一下,打包完后,就可以运行了
顺便记录一下,进入容器后,上传文件,直接往xshell里拖,会报个错rz: command not found 解决方法 apt-get install lrzsz
)
怎么用dockerfile里的cmd 启动俩命令:
两个办法,一个是CMD不用中括号框起来,将命令用"&&"符号链接:
# 用nohup框起来,不然npm start执行了之后不会执行后面的CMD nohup sh -c 'npm start && node ./server/server.js'
另一个方法是不用CMD,用ENTRYPOINT命令,指定一个执行的shell脚本,然后在entrypoint.sh文件中写上要执行的命令:
ENTRYPOINT ["./entrypoint.sh"]
entrypoint.sh文件如下:
// entrypoint.shnohup npm start & nohup node ./server/server.js &
往harbor上推容器,提示错误:
解决方法:
在/etc/docker下,修改daemon.json文件,写入:
{"insecure-registries":["你要推送的地址"]}
然后重启docker服务(systemctl restart docker)
部署时,有个坑:
http://www.yinhezi.top/post/71.html
解决方案是下边:
http://www.yinhezi.top/post/69.html
docker镜像文件里的日志,怎么保存在宿主机,因为,假如日志只写到容器里,容器关了,日志就没了。
docker run -p5001:5000 -d --name mojigo-apiv1.1.12_191113_BD -v /var/lib/docker/volumes:/opt/mojigo-api/mojigo_uwsgi 4eeac6cd18d5
(-v的参数,前边是宿主机的路径,后边是容器里的路径,都是写到文件夹就可以了,不需要写到具体的文件。然后uwsgi的配置文件写好按照文件大小切分日志。那容器里产生的日志文件,就会同步到宿主机的文件夹里,容器里的文件自动切分了,宿主机里的文件也会自动切分。这样就实现把日志数据持久化了)
一个经验,两个容器要是不能互通,多半需要关了防火墙
nohup python sever.py> ws.log 2>&1 &
https://www.cnblogs.com/S--S/p/11715694.html
docker服务关了,报错如下
这个多半是服务器重启了,导致docker服务停了,如下操作就可
systemctl daemon-reload
systemctl restart docker