Docker ghi đè tập tin /etc/resolv.conf của tôi trong các thùng chứa


17

Tôi muốn đặt ngăn resin/rpi-raspbian:jessiechứa của /etc/resolv.confmình thành:

nameserver 208.67.222.222
nameserver 208.67.220.220

Dockerfile của tôi có dòng sau:

ADD resolv.conf /etc/resolv.conf

Tập tin được thêm vào này chứa các máy chủ tên chính xác.

Máy chủ Docker của tôi /etc/resolv.confchứa thông tin chính xác.

Tôi đang chạy container như thế này:

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

Mặc dù tất cả những điều này, container cung cấp đầu ra này:

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

Chỉ sau khi tôi thay đổi độ phân giải thủ công từ bên trong vùng chứa (hoặc với docker exec) thì nó mới đúng.

Tôi muốn tránh phải sửa nó bằng lệnh exec. Bất cứ ai cũng có một ý tưởng những gì đang xảy ra ở đây?


Có một vài trường hợp được mô tả trên wiki của họ có thể giải thích tình huống của bạn.
Julie Pelletier

Hãy xem câu hỏi của tôi và câu trả lời.
Zeinab Abbasimazar

Câu trả lời:


14

AFAIK, docker ghi đè một số tệp trong ảnh khi nó bắt đầu , ngay cả khi chúng được THÊM trong Dockerfile. Điều này chắc chắn bao gồm /etc/hosts, và hầu hết có lẽ cũng xảy ra tương tự /etc/resolv.conf. Điều này rõ ràng được sử dụng để xây dựng đúng mạng "nội bộ" của Docker (để các hình ảnh nhìn thấy nhau, nhưng không lưu trữ, v.v.) Nếu bạn thực sự chắc chắn muốn ghi đè / sửa đổi một số tệp đó, tôi tin rằng bạn phải làm điều đó như là một phần của hành động thời gian chạy, đó là một phần của CMDdòng. Ví dụ:

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

3
Chính xác. /etc/resolv.confđược sao chép từ máy chủ khi một container được bắt đầu.
wvducky

4

Như tôi có thể thấy bạn đang sử dụng user-defined networksvà Docker Engine phiên bản> = 1.10. Vì vậy, từ các tài liệu động cơ docker chính thức về Embedded DNS server in user-defined networks:

Các địa chỉ IP --dns này được quản lý bởi máy chủ DNS nhúng và sẽ không được cập nhật trong tệp /etc/resolv.conf của bộ chứa.

Dns của bạn phải hoạt động, nhưng bạn sẽ không thấy trong bất kỳ tệp cấu hình nào.

Tài liệu tham khảo .


0

Tôi đã giải quyết vấn đề nếu đó là ứng dụng web cho container trong Azure.

2 container bạn đời . Kudu và chủ nhà

Các bước

1. Cài đặt ssh từ tệp docker của bạn (cũng bao gồm cấu hình sshd)

2. tạo một containerstart.sh (cập nhật độ phân giải)

3. Đặt điểm vào trong đó

Bây giờ máy chủ giải quyếtvv được cập nhật và bạn có thể sử dụng bất kỳ dns nào bạn muốn

PS: Nếu bạn không thể lấy DNS tùy chỉnh trong mạng, đừng lo lắng. Chúng tôi cũng không thể. Có thể cần phải thiết lập lại nếu bạn đang sử dụng môi trường ASE

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.