Docker - 带自定义配置的nginx

时间:2017-06-15 14:33:22

标签: nginx docker docker-compose

我正在尝试使用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文件一起使用?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

在容器中重新加载配置的常规方法是重新启动容器。由于您使用的是docker-compose,因此会docker-compose restart nginx。请注意,如果此配置是映像的一部分,则需要重新构建并重新部署新容器,但由于您使用的是卷,因此不需要。