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

新手上路,请多包涵

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

阅读 2.2k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题