容器命令遇到点问题,希望有老哥帮忙改改?
我是想在修改端口映射的基础上,也进行容器的目录映射,但是执行以下命令项目就是无法跑起来docker run -d --privileged=true --name codefever -p 9001:80 -p 23:22 -p 3307:3306 -v /www/wwwroot/codefever:/data -it pgyer/codefever-community:latest /usr/sbin/init
以下命令是不做目录映射,执行完,项目是可以跑起来的docker run -d --privileged=true --name codefever -p 9001:80 -p 23:22 -p 3307:3306 -it pgyer/codefever-community:latest /usr/sbin/init
我猜测大概率可能是容器内的/data目录下是已经存在了文件,如果你把一个空目录挂载到data目录之后,程序运行时找不到原来的文件,才导致的错误。 你可以试试先进入容器,再把原来容器内/data目录下的文件拷贝到/www/wwwroot/codefever,再尝试启动。
===
原来docker run -d --privileged=true --name codefever -p 9001:80 -p 23:22 -p 3307:3306 -it pgyer/codefever-community:latest /usr/sbin/init
这个可以正常启动的,但是数据是放在容器内,所以现在需求是把容器内的数据目录/data挂载到宿主机上的/www/wwwroot/codefever。
所以命令改成了:docker run -d --privileged=true --name codefever -p 9001:80 -p 23:22 -p 3307:3306 -v /www/wwwroot/codefever:/data -it pgyer/codefever-community:latest /usr/sbin/init
这里增加了-v /www/wwwroot/codefever:/data
,把主机的/www/wwwroot/codefever
挂载到容器上的/data
目录下。
但是这里有有个问题,这个镜像内,/data
目录原来可能是有其他文件或者文件夹的,所以这里把/www/wwwroot/codefever
挂载到/data
上,codefever文件会覆盖原来/data
目录下的文件。程序启动的时候,发现找不到原来data上的文件或者文件夹,可能就会报错。
所以,可以提前把镜像内/data目录下的文件复制到主机的/www/wwwroot/codefever
目录下,再进行挂载,这样,挂载后,文件就是一致的,程序就能正常启动了。
===
我去看了一下,codefever这个项目,其实是有提供docker-compose文件的,其实你可以直接使用docker-compose 文件去部署。https://github.com/PGYER/codefever/blob/master/docker-compose.yml
这里根据docker-compose的文件,也可以推断出,数据持久化的目录应该是/data/www/codefever-community/git-storage
和 /data/www/codefever-community/application/logs
最后你可以试试这样启动容器,只挂载git-storage这个目录,这样就不会影响到/data目录下其他的文件或文件夹了。docker run -d --privileged=true --name codefever -p 9001:80 -p 23:22 -p 3307:3306 -v /www/wwwroot/codefever/git-storage:/data/www/codefever-community/git-storage -it pgyer/codefever-community:latest /usr/sbin/init
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容