使用docker创建nginx容器
在使用docker时,为了便于管理文件,可以将容器中的文件或目录挂载到宿主主机上,这样就不用繁琐的进入到容器中进行操作了。
我在使用docker配置nginx容器时,按网上教程映射目录,遇到一个问题,就是挂载nginx的配置文件夹时老是报错,不能成功运行nginx容器,但挂载其它目录却没问题,这让我百思不得其解,。
具体报错提示如下:
Failure
OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting "/docker/nginx/nginx.conf" to rootfs "/var/lib/docker/overlay2/80a97eb1c9046f058359c1cf5fb63dc752c28a44e5e0cdb36846aaab888f6075/merged" at "/var/lib/docker/overlay2/80a97eb1c9046f058359c1cf5fb63dc752c28a44e5e0cdb36846aaab888f6075/merged/etc/nginx/nginx.conf" caused "not a directory"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
后来发现有个变相的方法可以进行配置文件夹的挂载:
1、先创建一个名为nginx的容器;
2、在宿主主机上建立一个文件夹,如/docker/nginx;
3、进入到这个文件夹,将nginx容器内的配置目录拷贝到当前目录下,运行:
docker container cp nginx:/etc/nginx .
注意:nginx为容器名,/etc/nginx为容器中的nginx配置文件目录,更要注意的是,别忘了最后的那个小点!此时当前文件下多了一个nginx的目录,里面有容器中nginx的配置文件,为了便于区别我们可以将这个复制过来的nginx文件夹更名为config:
mv nginx config
4、然后销毁这个容器,再重新建立一个nginx容器,在建立过程中就可以挂载配置文件的目录了。我们一般挂载3个目录:网站目录(/usr/share/nginx/html挂载到/docker/web:)、日志目录(/var/log/nginx挂载到/docker/nginx/logs)和配置文件目录(/etc/nginx挂载到/docker/nginx/config):
拉取nginx镜像并运行nginx容器
docker pull nginx:latest
docker run \
--name nginx \
-v /docker/web:/usr/share/nginx/html \
-v /docker/nginx/config:/etc/nginx \
-v /docker/nginx/logs:/var/log/nginx \
-p 80:80 \
-p 443:443 \
-d nginx:latest