重新发一下,之前发的一个帖子没表达清楚意思,顺便把大佬的回答搬过来
以下是原问题:
下面两部分代码,一个是 linuxserver 的 nginx 镜像,一个是官方版
docker run -d \
--name=nginx \
-v /home/nginx:/config \ # 注意看这部分
--restart unless-stopped \
lscr.io/linuxserver/nginx:latest
docker run -d \
--name nginx1 \
--log-opt max-size=1m \
-v /home/nginx1:/etc/nginx \ 注意看这部分
--restart unless-stopped \
nginx
开始的时候我的 home 目录是空白的,什么都没有
当运行这两个容器之后,
linuxserver 会在 /home/nginx 里自动创建文件夹和文件(注意是文件夹和配置文件都自动创建了)
而官方版的镜像不会自动创建文件。
如图:
nginx 文件夹下面有很多文件,都是容器自动创建的,但是 nginx1 文件夹里面什么都没有
请问:
1.怎么让官方版像 linuxserver 一样自动创建文件呢?就是把容器内的 /etc/nginx/nginx.conf 这些配置文件自动拷贝或者说创建到本地。或者说 linuxserver 是怎么实现的呢?
1
helphelp OP 以下是 @javalaw2010 大佬的回答
注意一下 https://github.com/linuxserver/docker-baseimage-alpine-nginx 这个容器的构建,/root 文件加会被添加进容器和 /合并,注意 /migrations 目录下面的文件,这个文件会被更基础的镜像 https://github.com/linuxserver/docker-baseimage-alpine 的 S6 进程管理器读取,会把 nginx 的配置文件从 apt 源安装的初始目录拷贝到 /config 文件夹下面。 想要启动容器的时候自动创建文件夹的话,一种方案就是你用跟 linuxserver 一样的进程管理器的方案,然后写一些启动脚本让它读取。还有一种更轻量级的方案就是写一个 docker-entrypoint.sh 脚本,作为容器的 entrypoint ,在这个里面做一些初始化的工作,然后用 gosu 和 exec 命令执行 command ,实际的使用示例可以看这个: https://github.com/laravel/sail/blob/1.x/runtimes/8.2/start-container |
2
helphelp OP 另外吐槽一下,为啥发帖支持 Markdown 回帖不支持...
|
3
helphelp OP 不能编辑了,想替换帖子里面那个图片的,重新截了一张
![nginx]( https://file.uhsea.com/2305/97cc78035fc6d0868a6b5b9ab91e1e63H3.png) |
4
helphelp OP |
5
loveqianool 2023-05-29 01:54:21 +08:00
```
sudo sh -c "echo 'docker exec -i --user="\$UID":users nginx nginx "\$@"' > /usr/local/bin/nginx" && \ sudo chmod +x /usr/local/bin/nginx && \ docker run --rm -ti xmartlabs/htpasswd admin 123456 > /opt/docker/nginx/.htpasswd && \ docker run --name tmp-nginx -d nginx:alpine && \ docker cp tmp-nginx:/etc/nginx /opt/docker && \ docker cp tmp-nginx:/usr/share/nginx/html/50x.html /opt/www/ && \ docker cp tmp-nginx:/usr/share/nginx/html/index.html /opt/www/ && \ mkdir /opt/docker/nginx/logs; \ sudo chown -R "$UID":users /opt/docker/nginx/logs && \ sudo chmod -R g+rwx /opt/docker/nginx/logs && \ docker rm -f tmp-nginx ``` |
6
kaedeair 2023-05-29 09:26:25 +08:00
https://hub.docker.com/_/nginx 中 Complex configuration 一节写了配置在 /etc/nginx/下面,其他的配置项需要自己设置和挂载相应目录
|
7
helphelp OP @loveqianool 大佬 这是将先运行容器在 docker cp 的过程用一键脚本完成了是吧
|