容器命令遇到点问题,希望有老哥帮忙改改?

作者站长头像
站长
· 阅读数 6

我是想在修改端口映射的基础上,也进行容器的目录映射,但是执行以下命令项目就是无法跑起来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

回复
1个回答
avatar
test
2024-07-03

我猜测大概率可能是容器内的/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

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容