По причинам, по которым я не могу определить адрес сервера имен по умолчанию для докера, примененный к контейнеру Linux, из-за невозможности разрешить и внешние адреса.Я пытаюсь обновить адрес сервера имен с помощью команды sed в файле resolv.conf, но после запуска команды появляется окно настройки для удаления образа, на котором он был запущен, в результате чего сервер имен не обновляется.
КогдаDocker build создает контейнер Linux на моем компьютере с Windows, в результате чего полученный контейнер имеет значение сервера имен в resolv.conf, равное 192.168.65.1.Я не могу разрешить любой урис с таким набором.Я не могу даже пинговать google.com.Если я обновлю сервер имен, чтобы использовать DNS от Google, 8.8.8.8, я смогу пропинговать другие хосты и успешно запустить команды, которые начали проблему (восстановление dotnet).
Я создал образ, который скопировал мои файлы в /src, а затем запустил его в интерактивном режиме, чтобы попытаться отладить.Я исправил свою проблему, выполнив следующие команды
# copy resolv.conf because I can't run sed on it directly
RUN cp /etc/resolv.conf /etc/resolv.conf.temp
# make my change to the temp file
RUN sed -i 's/192.168.65.1/8.8.8.8/' /etc/resolv.conf.temp
# copy the modified file over original
RUN cp /etc/resolv.conf.temp /etc/resolv.conf
Работая в интерактивном режиме в контейнере, затем я могу успешно вызвать восстановление dotnet для моих файлов src.
Однако, когда я включаю эти инструкции в Dockerfileи создайте образ, в котором происходит копирование, команда sed выполняется во временном файле, и команда copyover, кажется, происходит, но результирующий образ все еще имеет исходное значение сервера имен 192.168.65.1.
Добавление этой команды после второйcp:
RUN cat /etc/resolv.conf
Подтверждает, что при запуске команды cat исходное содержимое resolv.conf не повреждено.
Вот соответствующая часть вывода сборки:
Step 9/12 : RUN cp /etc/resolv.conf /etc/resolv.conf.temp
---> Running in cf8e037f5675
Removing intermediate container cf8e037f5675
---> 53f1c8bb86c6
Step 10/12 : RUN sed -i 's/192.168.65.1/8.8.8.8/' /etc/resolv.conf.temp
---> Running in 14b6a8381261
Removing intermediate container 14b6a8381261
---> 22039e11f812
Step 11/12 : RUN cp /etc/resolv.conf.temp /etc/resolv.conf
---> Running in 46d295d869bf
Removing intermediate container 46d295d869bf
---> ea1a18576f87
Step 12/12 : RUN cat /etc/resolv.conf
---> Running in 6cb4726e58cb
# This configuration is written to the config.iso
nameserver 192.168.65.1
search mycompany.local
domain mycompany.local
Removing intermediate container 6cb4726e58cb
---> 5ad060514a74
Successfully built 5ad060514a74
Я ожидаю, что во встроенном образе будет установлено новое значение сервера имен из шагов 10 и 11, но это не так, похоже, что работа происходит, но затем промежуточное изображение отбрасывается, и я не понимаю, почему и чтоправильное исправление.