Docker的Apache和Nginx的端口冲突
描述
我有一个项目,具有以下configuration:
1)主要网站是用PHP编写的
2)API是用NodeJS编写的
由于我在几台运行不同操作系统的机器上开发,所以我决定使用docker,这样我就可以在任何机器上运行项目。
我试图让nginx作为反向代理服务器API和网站在以下方式:
1)example.com – >网站
2)api.example.com – > API
但是,即使我没有暴露它,Apache似乎也自动分配端口80。 这会导致与nginx运行在同一个盒子上的冲突。 有没有办法阻止apache / php自动绑定到主机的端口80。
我试图将端口映射到不同的端口,但是这导致apache / php简单地添加一个额外的端口,如下所示:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc830d3562e4 apache_website "docker-php-entrypoin" 3 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:80->8000/tcp apache_website_run_7
docker – 撰写文件
version: '2' services: nginx: build: nginx ports: - "80:80" expose: - "80" restart: always depends_on: - website - api api: image: node command: node /var/www/index.js restart: always website: build: php:7.1-apache ports: - "80:800" restart: unless-stopped
nginx的dockerfile
FROM nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
nginxconfiguration文件
worker_processes 4; events { worker_connections 1024; } http { include mime.types; # fallback in case we can't determine a type default_type application/octet-stream; upstream example.com { server website:80 fail_timeout=0; } server { listen 80; client_max_body_size 4G; keepalive_timeout 5; root /opt/app/public; location / { try_files $uri @proxy_to_app; } server_name example.com; location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://example.com; } error_page 500 502 503 504 /500.html; location = /500.html { root /opt/app/public; } } # API #======================================================================== upstream api.example.com { server api:80 fail_timeout=0; } server { listen 80; client_max_body_size 4G; keepalive_timeout 5; root /opt/app/public; location / { try_files $uri @proxy_to_app; } server_name api.example.com; location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://api.example.com; } error_page 500 502 503 504 /500.html; location = /500.html { root /opt/app/public; } } }
如何防止Apache / PHP绑定到主机的端口80? 我想保留端口之间的容器间连接,但我不希望该端口暴露给主机。
我想只为nginx公开端口80。
请注意,我知道我们可以通过更改ports.config文件来改变apache的configuration,使其监听不同的端口,因为我认为这是一个黑客攻击。 但是我不想这样做。 如果可能,我想使用docker进行修改。
我不明白为什么在没有我指定在docker-compose文件中的端口被暴露。
https://docs.docker.com/compose/compose-file/#/ports解释主机端口是第一位的。 你是暴露端口80为nginx 和为Apache。 对于nginx而言,您将容器80显示为主机80,并将apache容器800显示为端口80。
可能你刚刚得到了相反的数字。
- 授权使用docker时,不能使用identityserver4
- 如何使用相同的Rpectesting来testingRails项目的生产版本?
- docker工作人员构成破坏旧数据库吗?
- docker-machine中的Eval:terminal vs shell脚本
- 在Windows容器上使用复杂的PowerShell脚本构buildDockerfile
- docker中的`npm start`结束于:请安装受支持的C ++ 11编译器并重新安装模块
- Dockerpy执行命令到猫日志文件
- 在远程registry中构build上下文文件夹?
- ECS Docker Container获取运行cron的envvariables