【问题标题】:Docker - how do i restart nginx to apply custom config?Docker - 我如何重新启动 nginx 以应用自定义配置?
【发布时间】:2017-06-15 14:33:22
【问题描述】:

我正在尝试使用 docker 配置 LEMP 开发环境,但在使用 nginx 时遇到问题,因为一旦有了新配置,我似乎无法重新启动 nginx

docker-compose.yml:

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - '8080:80'
    volumes:
      - ./nginx/log:/var/log/nginx
      - ./nginx/config/default:/etc/nginx/sites-available/default
      - ../wordpress:/var/www/wordpress
  php:
    image: php:fpm
    ports:
      - 9000:9000
  mysql:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - ./mysql/data:/var/lib/mysql

我有一个自定义的 nginx 配置来替换 /etc/nginx/sites-available/default,在正常的 Ubuntu 环境中,我会运行 service nginx restart 来拉入新配置。

但是,如果我尝试在这个 Docker 环境中这样做,nginx 容器 exits with code 1

docker-compose exec nginx sh
service nginx restart

-exit with code 1-

如何将nginx 与自定义/etc/nginx/sites-available/default 文件一起使用?

【问题讨论】:

    标签: nginx docker docker-compose


    【解决方案1】:

    基本上你可以通过调用这个命令来reloadnginx配置:

    docker exec <nginx-container-name-or-id> nginx -s reload
    

    【讨论】:

      【解决方案2】:

      Docker 容器应该在前台运行单个应用程序。当该进程作为容器内的 pid 1 启动时,容器也会退出(类似于在 linux 服务器上杀死 pid 1 将关闭该机器)。此进程不由 OS 服务命令管理。

      在容器中重新加载配置的正常方法是重新启动容器。既然您使用的是docker-compose,那就是docker-compose restart nginx。请注意,如果此配置是您的映像的一部分,您将需要重新构建并重新部署一个新容器,但由于您使用的是卷,因此没有必要这样做。

      【讨论】:

      • 我确实尝试使用docker-compose restart nginx 并重新启动了容器,但我的预期配置没有被拉入。这可能是因为在这种情况下配置路径是/etc/nginx/conf.d/default.conf 而不是/etc/nginx/sites-available/default .但是挂载卷:- ./nginx/config:/etc/nginx/conf.d时,nginx容器启动后立即退出。无论如何,你已经回答了我原来的问题。如果您对如何找出容器立即退出的原因有任何建议,我很想听听。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2015-07-20
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      相关资源
      最近更新 更多