Docker中配置Nginx與PHP

2021-09-16 12:19:28 字數 1788 閱讀 6765

最近在學docker,順便配置了一下docker中的nginx與php,發現網上的關於docker中配置nginx與php的資料很少,而且有的也很舊,沒有太多的參考性,所以決定自己寫一篇,分享一下其中的經驗。

docker: version 17.06.2-ce-mac27 (19124)

php:7.1

nginx:1.13.3

作業系統 mac 10.12.6

啟動docker之後,開啟命令列,你的命令列裡面就有了docker這個命令:

docker pull nginx
同理,我也是使用的官方的php映象,其實nginx和php我都推薦官方的映象,畢竟官方映象代表著安全和穩定。

docker pull php:7.1-fpm
安裝好nginx之後,便用命令啟動它:

docker run -p 80:80 --name mynginx -v /users/doubleduan/documents/project:/home -v /users/doubleduan/documents/conf:/etc/nginx/conf.d -d nginx
docker run -p 9000:9000 --name myphp -v /users/doubleduan/documents/project:/home -d php:7.1-fpm
下面貼出我的配置

server 

location ~ \.php$

}

這個algo.test.com我在主機的hosts檔案中配置的指向127.0.0.1,其實就是訪問的本機80埠。這裡要特別注意兩個點:

第一點:是fastcgi_pass 172.17.0.3:9000,這裡的172.17.0.3就是php容器的ip,查詢容器ip的方法:

docker inspect 容器id或容器名 |grep '"ipaddress"'
你自己配置的話要替換成你自己的php容器ip,注意不能用127.0.0.1,因為我用的是docker預設的網路連線模式,也就是docker bridge模式,這種模式下你要訪問另乙個容器就必須用那個容器的虛擬ip,而且埠也必須要與宿主機的相應埠繫結,因為宿主機是乙個閘道器,nginx容器訪問php容器要經過宿主機的閘道器**的,所以不繫結埠肯定訪問不了。

第二點

關於fastcgi_param script_filename $document_root$fastcgi_script_name這個配置,如果你想用$document_root變數,那就必須把nginx容器的資料目錄與php容器的資料目錄弄成一致的,比如我的nginx容器的資料目錄是/home/algorithm,在php容器中依然是這個,如果php容器中的目錄改變了,不是這個了,那麼php容器就會找不到請求的這個檔案的。因為兩個容器相當於兩套檔案系統,路徑有可能是不一樣的。但是呢,如果你偏要設定成不一樣的,那麼只能寫死位址了,比如弄成這樣:fastcgi_param script_filename /home/algorithm/$fastcgi_script_name,就可以讓php容器訪問到相應的檔案了。

弄好配置檔案之後,重啟nginx容器,就可以訪問了。

Docker 中 Nginx安裝與部署

mkdir p data nginx 拷貝到 data nginx conf 就是剛才建立的資料夾裡面 之後再關閉nginx docker stop nginx docker ps a 檢視關閉的容器 docker rm f 容器id 容器刪除 再重啟nginx 但要加上掛載 docker run ...

Docker部署nginx並修改配置

製作nginx映象 到 docker hub 搜尋nginx,選擇自己需要的映象 dockerfile 中引入即可 from nginx直接打包啟動映象,預設為80埠 映象中檔案路徑說明 usr share nginx html web靜態資源存放在該路徑 etc nginx nginx.conf ...

docker容器的nginx配置https證書

nginx容器要開啟443介面和80介面,這點非常重要,我配置的時候因為沒有開啟443埠,其他配置都沒有問題,搞了一天才發現是這兒的原因。docker run name nginx d p 443 443 p 80 80 nginx latest如果你網域名稱不是阿里雲的,要在網域名稱解析網新增解析...