นักเทียบท่าจะแทนที่ไฟล์ /etc/resolv.conf ของฉันภายในคอนเทนเนอร์


17

ฉันต้องการตั้งค่าresin/rpi-raspbian:jessieคอนเทนเนอร์ของฉันเป็น/etc/resolv.conf:

nameserver 208.67.222.222
nameserver 208.67.220.220

My Dockerfile มีบรรทัดต่อไปนี้:

ADD resolv.conf /etc/resolv.conf

ไฟล์ที่เพิ่มนี้มีเนมเซิร์ฟเวอร์ที่ถูกต้อง

โฮสต์ของนักเทียบท่าของฉัน/etc/resolv.confมีข้อมูลที่ถูกต้อง

ฉันใช้ภาชนะเช่นนี้:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

แม้ทั้งหมดนี้คอนเทนเนอร์จะให้ผลลัพธ์นี้:

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

เป็นเพียงหลังจากที่ฉันเปลี่ยน resolv.conf ด้วยตนเองจากภายในคอนเทนเนอร์ (หรือกับนักเทียบท่า exec) ที่มันดูถูกต้อง

ฉันควรหลีกเลี่ยงการแก้ไขด้วยคำสั่ง exec ใครมีความคิดว่าเกิดอะไรขึ้นที่นี่


มีบางกรณีที่อธิบายไว้ในวิกิซึ่งสามารถอธิบายสถานการณ์ของคุณได้
Julie Pelletier

ลองดูที่คำถามและคำตอบของฉัน
Zeinab Abbasimazar

คำตอบ:


14

AFAIK นักเทียบท่าจะแทนที่ไฟล์บางไฟล์ในรูปภาพเมื่อมันเริ่มขึ้นแม้ว่าไฟล์เหล่านั้นจะถูกเพิ่มใน Dockerfile สิ่งนี้รวมถึงแน่นอน/etc/hostsและอาจเกิดขึ้นได้/etc/resolv.confเช่นกัน เห็นได้ชัดว่านี่ใช้เพื่อสร้างเครือข่ายเริ่มต้น "ภายใน" ของ Docker อย่างถูกต้อง (เพื่อให้รูปภาพเห็นซึ่งกันและกัน แต่ไม่ใช่โฮสต์ ฯลฯ ) หากคุณแน่ใจว่าคุณต้องการแทนที่ / แก้ไขไฟล์เหล่านั้นบางอย่างฉันเชื่อว่าคุณต้อง ทำเช่นนั้นเป็นส่วนหนึ่งของการกระทำรันไทม์ที่เป็นส่วนหนึ่งของCMDบรรทัด ตัวอย่างเช่น:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...

3
สิ่งนี้ถูกต้อง /etc/resolv.confจะถูกคัดลอกจากโฮสต์เมื่อเริ่มคอนเทนเนอร์
wisbucky

4

อย่างที่ฉันเห็นคุณกำลังใช้user-defined networksและ Docker Engine เวอร์ชัน> = 1.10 ดังนั้นจากเอกสารประกอบนักเทียบท่าเครื่องยนต์อย่างเป็นทางการเกี่ยวกับEmbedded DNS server in user-defined networks:

--dns ที่อยู่ IP เหล่านี้ได้รับการจัดการโดยเซิร์ฟเวอร์ DNS ในตัวและจะไม่ได้รับการอัปเดตในไฟล์ /etc/resolv.conf ของคอนเทนเนอร์

DNS ของคุณต้องทำงาน แต่คุณจะไม่เห็นในไฟล์กำหนดค่าใด ๆ

อ้างอิง


0

ฉันได้แก้ไขปัญหาแล้วหากเป็นแอปพลิเคชันเว็บสำหรับตู้คอนเทนเนอร์ใน Azure

มี2 ตู้คอนเทนเนอร์ Mate Kudu และพิธีกร

ขั้นตอน

1. ติดตั้ง ssh จากไฟล์นักเทียบท่าของคุณ (รวมถึงการกำหนดค่า sshd)

2. สร้าง containerstart.sh (ซึ่งปรับปรุง resolv.conf)

3. ตั้งค่าจุดเข้าด้านใน

ตอนนี้ host resolv.conf ได้รับการอัพเดตและคุณสามารถใช้ DNS ที่คุณต้องการ

PS: ถ้าคุณไม่สามารถรับ DNS ที่กำหนดเองในเครือข่ายไม่ต้องกังวล เราก็ทำไม่ได้เช่นกัน อาจต้องรีเซ็ตหากคุณใช้สภาพแวดล้อม ASE

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.