Docker-如何重新启动nginx以应用自定义配置?
我正试图用docker配置一个LEMP开发环境,但在使用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
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容器在启动后立即退出。不管怎样,你已经回答了我最初的问题。如果你对如何找出一个容器立即退出的原因有什么建议,我很乐意听听。