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