Docker-如何重新启动nginx以应用自定义配置?

Docker-如何重新启动nginx以应用自定义配置?,nginx,docker,docker-compose,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/n

我正试图用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环境中,我会运行
服务nginx restart
来引入新的配置

但是,如果我尝试在Docker环境中执行此操作,则
nginx
容器
将以代码1退出

docker-compose exec nginx sh
service nginx restart

-exit with code 1-

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

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

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

基本上,您可以通过调用以下命令来进行nginx配置:

docker exec <nginx-container-name-or-id> nginx -s reload
docker exec nginx-s重新加载

我确实尝试使用了
docker compose restart nginx
重新启动了容器,但我的预期配置没有被引入。这可能是因为本例中的配置路径是
/etc/nginx/conf.d/default.conf
,而不是
/etc/nginx/sites available/default
。但是,当装载卷:
-./nginx/config:/etc/nginx/conf.d
时,nginx容器在启动后立即退出。不管怎样,你已经回答了我最初的问题。如果你对如何找出一个容器立即退出的原因有什么建议,我很乐意听听。