จะสร้างตัวแปร env แบบไดนามิกใน Dockerfile ได้อย่างไร

ฉันใช้ Docker composé เวอร์ชัน 1.5 หรือ 6 และอิมเมจ nginx ฉันต้องการกำหนดพารามิเตอร์ nginx.config ในการทำเช่นนั้น ฉันต้องการสร้าง var จาก $(ชื่อฐานบางเส้นทาง) แต่ปัญหาคือ Docker ไม่ยอมรับ vars แบบไดนามิกเช่นนั้นในส่วน env ของ Dockerfile ปัญหาอีกประการหนึ่งคือฉันยังไม่สามารถแมปตัวแปรเหล่านั้นในการรันบิลด์ได้เนื่องจากนักเทียบท่าเขียนไม่ยอมรับ vars ที่เป็นสคริปต์แบบไดนามิก จะเอาชนะปัญหานั้นได้อย่างไร?

From nginx
ENV myvar=$(basename /)

สิ่งนี้เป็นไปไม่ได้ที่จะสร้างภาพ

อีกวิธีหนึ่งคือ

ARG myvar
ENV myvar2=myvar

แต่เวอร์ชันการเขียน Docker ของฉันอนุญาตให้ตั้งค่าเท่านั้น

Environment: myvar=$(basename mypathinthevolume/)

นั่นก็ดูเหมือนจะไม่ได้ผลเช่นกัน


person kol23    schedule 14.07.2020    source แหล่งที่มา
comment
โปรดให้ข้อมูลเพิ่มเติมแก่เรา วาง dockerfile และ docker-compose เป็นอย่างน้อย   -  person Sergio Tanaka    schedule 14.07.2020
comment
คุณเคยดูเทคนิคเหมือนกับที่อธิบายไว้ใน ตัวแปรสภาพแวดล้อมทดแทนใน NGINX หรือไม่ กำหนดค่าจากนักเทียบท่าเขียน? หากคุณสร้างการกำหนดค่าเทมเพลตแล้วเขียนใหม่ในจุดเข้าใช้งานรูปภาพของคุณ คุณสามารถแทนที่เนื้อหาได้ตามที่คุณต้องการ   -  person David Maze    schedule 14.07.2020
comment
ในตัวอย่างเฉพาะของ $(basename /some/path) โดยทั่วไปแล้วโครงร่างระบบไฟล์ของคอนเทนเนอร์ Docker จะได้รับการแก้ไข และสามารถใช้เส้นทางแบบฮาร์ดโค้ดที่นั่นได้ หากคุณกำลังผูกเนื้อหาโฮสต์ กำหนดให้เส้นทางฝั่งคอนเทนเนอร์เป็น เช่น /data   -  person David Maze    schedule 14.07.2020
comment
@David Maze นั่นคือปัญหา ฉันไม่สามารถใช้เส้นทางแบบคงที่ได้เนื่องจากเนื้อหาโวลุ่มแตกต่างกัน และฉันต้องการชื่อในการกำหนดค่า   -  person kol23    schedule 14.07.2020
comment
อีกประการหนึ่ง - ฉันไม่สามารถใช้อิมเมจฐาน nginx ได้ ฉันใช้ FROM nginx ดังนั้นฉันไม่สามารถแมปตัวแปรในบรรทัด/คอนเทนเนอร์เดียวกันกับที่ดำเนินการ nginx ได้   -  person kol23    schedule 14.07.2020