如何通过docker-compose.yml在Nginx服务内执行命令且不使用Dockerfile
根因说明
你替换了Nginx镜像的默认启动命令,容器启动后只会执行rm /etc/nginx/conf.d/default.conf这一条命令,执行完成后没有启动Nginx主进程,容器就会直接退出,自然无法正常提供服务。
可行解决方案(无需修改Dockerfile)
优先推荐使用方案2,无需额外修改启动命令,配置更简洁也不会引入额外的启动开销。
方案1:修改command命令串,先删文件再启动Nginx
把你现有的command字段替换为如下配置,用shell先执行删除操作,再启动Nginx主进程:
command: ["/bin/sh", "-c", "rm -f /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"]
注意加
-f参数是为了避免文件不存在时命令报错导致启动中断。
修改后完整的web服务配置示例:
web: image: nginx:1.21.1 container_name: webdev-nginx-teste command: ["/bin/sh", "-c", "rm -f /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"] ports: - "80:80" - "443:443" networks: - net-teste volumes: - ./confs/servers/:/etc/nginx/conf.d/ - ./projects:/var/www/ - ./confs/ssl/:/var/www/ssl
方案2:直接利用挂载特性省略删除操作
你当前的配置中已经把本地./confs/servers/目录挂载到了容器的/etc/nginx/conf.d/路径,挂载后本地目录会完全覆盖容器内对应的目录,只要你本地./confs/servers/路径下没有default.conf文件,容器内对应路径下自然就不会存在该文件,直接删掉配置里的command字段即可正常使用。
内容的提问来源于stack exchange,提问作者Alison Juliano
相关产品推荐
相关产品推荐

