คำตอบใหม่
อัปเดต Docker Compose แล้ว ตอนนี้มีรูปแบบไฟล์เวอร์ชัน 2แล้ว
ไฟล์เวอร์ชัน 2 ได้รับการสนับสนุนโดย Compose 1.6.0+ และต้องใช้ Docker Engine เวอร์ชัน 1.10.0+
ตอนนี้พวกเขาสนับสนุนคุณสมบัติเครือข่ายของ Docker ซึ่งเมื่อเรียกใช้จะตั้งค่าเครือข่ายเริ่มต้นที่เรียกว่าmyapp_default
จากเอกสารของพวกเขาไฟล์ของคุณจะมีลักษณะดังนี้:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
fpm:
image: phpfpm
nginx
image: nginx
เนื่องจากคอนเทนเนอร์เหล่านี้ถูกเพิ่มลงในเครือข่ายmyapp_defaultเริ่มต้นโดยอัตโนมัติพวกเขาจึงสามารถพูดคุยกันได้ จากนั้นคุณจะมีในการกำหนดค่า Nginx:
fastcgi_pass fpm:9000;
นอกจากนี้ยังเป็นที่กล่าวถึงโดย @treeface ในความคิดเห็นที่จำได้ว่าเพื่อให้แน่ใจว่า PHP-FPM ฟังพอร์ต 9000 นี้สามารถทำได้โดยการแก้ไขที่คุณจะต้อง/etc/php5/fpm/pool.d/www.conf
listen = 9000
คำตอบเก่า
ฉันเก็บข้อมูลด้านล่างไว้ที่นี่สำหรับผู้ที่ใช้ Docker / Docker รุ่นเก่าเขียนและต้องการข้อมูล
ฉันยังคงสะดุดกับคำถามนี้ใน Google เมื่อพยายามหาคำตอบสำหรับคำถามนี้ แต่มันก็ไม่ใช่สิ่งที่ฉันกำลังมองหาเนื่องจาก Q / A เน้นเรื่องนักเทียบท่า (ซึ่งในขณะที่เขียนมีเพียงการสนับสนุนการทดลองสำหรับ คุณสมบัติเครือข่ายนักเทียบท่า) นี่คือสิ่งที่ฉันได้เรียนรู้
เมื่อเร็ว ๆ นี้นักเทียบท่าได้เลิกใช้งานคุณลักษณะการเชื่อมโยงเพื่อสนับสนุนคุณลักษณะเครือข่าย
ดังนั้นการใช้คุณสมบัติ Docker Networks คุณสามารถเชื่อมโยงคอนเทนเนอร์ได้โดยทำตามขั้นตอนเหล่านี้ สำหรับคำอธิบายทั้งหมดเกี่ยวกับตัวเลือกต่างๆให้อ่านในเอกสารที่ลิงก์ไว้ก่อนหน้านี้
ก่อนอื่นให้สร้างเครือข่ายของคุณ
docker network create --driver bridge mynetwork
จากนั้นเรียกใช้คอนเทนเนอร์ PHP-FPM ของคุณเพื่อให้แน่ใจว่าคุณเปิดพอร์ต 9000 และกำหนดให้กับเครือข่ายใหม่ของคุณ ( mynetwork
)
docker run -d -p 9000 --net mynetwork --name php-fpm php:fpm
บิตที่สำคัญที่นี่คือ --name php-fpm
ท้ายคำสั่งซึ่งเป็นชื่อเราจะต้องใช้ในภายหลัง
จากนั้นเรียกใช้คอนเทนเนอร์ Nginx ของคุณอีกครั้งกำหนดให้กับเครือข่ายที่คุณสร้างขึ้น
docker run --net mynetwork --name nginx -d -p 80:80 nginx:latest
สำหรับคอนเทนเนอร์ PHP และ Nginx คุณสามารถเพิ่มได้ --volumes-from
คำสั่งและอื่น ๆ ได้ตามต้องการ
ตอนนี้การกำหนดค่า Nginx มาแล้ว ซึ่งควรมีลักษณะคล้ายกับสิ่งนี้:
server {
listen 80;
server_name localhost;
root /path/to/my/webroot;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
สังเกตfastcgi_pass php-fpm:9000;
ในบล็อกสถานที่ นั่นคือการบอกว่า contact container php-fpm
บนพอร์ต 9000
เมื่อคุณเพิ่มคอนเทนเนอร์ลงในเครือข่าย Docker bridge พวกเขาทั้งหมดจะได้รับการอัปเดตไฟล์โฮสต์โดยอัตโนมัติซึ่งทำให้ชื่อคอนเทนเนอร์เทียบกับที่อยู่ IP ดังนั้นเมื่อ Nginx เห็นว่าจะติดต่อกับคอนเทนเนอร์ PHP-FPM ที่คุณตั้งชื่อphp-fpm
ไว้ก่อนหน้านี้และกำหนดให้กับmynetwork
เครือข่าย Docker ของคุณ
คุณสามารถเพิ่มการกำหนดค่า Nginx นั้นได้ในระหว่างขั้นตอนการสร้างคอนเทนเนอร์ Docker ของคุณหรือหลังจากนั้นขึ้นอยู่กับคุณ