Oto prosty plik Dockerfile
FROM phusion/baseimage:0.9.19
RUN echo nameserver 10.0.0.1 > /etc/resolv.conf
RUN cat /etc/resolv.conf
Wydaję polecenie:
docker build .
Otrzymuję ten wynik:
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM phusion/baseimage:0.9.19
---> c39664f3d4e5
Step 2/3 : RUN echo nameserver 193.205.160.3 > /etc/resolv.conf
---> Running in ffa4ed664323
Removing intermediate container ffa4ed664323
---> 91d2456bb9d7
Step 3/3 : RUN cat /etc/resolv.conf
---> Running in cd6463980f69
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
# No DNS servers known.
nameserver 8.8.8.8
nameserver 8.8.4.4
Removing intermediate container cd6463980f69
---> 089e36d3d140
Successfully built 089e36d3d140
Najwyraźniej plik nie zawiera tekstu, którego oczekiwałem.
Przepraszam, jestem nowy w Dockerze. Czy ktoś wie, co robię źle? Dziękuję Ci.
Używam Ubuntu 18.04 i zainstalowałem docker z przystawką.
2 odpowiedzi
Plik /etc/resolv.conf
jest zarządzany przez Docker i jest wstrzykiwany do każdego uruchamianego kontenera. Każda linia RUN jest wykonywana w nowym kontenerze. Dlatego podczas drugiej linii RUN tworzony jest nowy kontener i do niego jest wstrzykiwana nowa kopia /etc/resolv.conf. Aby zarządzać DNS w utworzonych kontenerach, istnieje kilka opcji:
docker run --dns 10.0.0.1 your_image
doda wpis DNS do pojedynczego kontenera- Dodanie
{ "dns": ["10.0.0.1"] }
do/etc/docker/daemon.json
i ponowne uruchomienie silnika Dockera (zazwyczaj za pomocąsystemctl restart docker
) ustawi nowe domyślne dla wszystkich kontenerów docker i może zostać zastąpione powyższą opcją. - Aktualizacja hosta
/etc/resolv.conf
wpłynie na kontenery, które rozpocznie, zakładając, że nie wykonano żadnego z powyższych.
Zastrzeżenie, druga i trzecia opcja dotyczą dockera zainstalowanego na hoście, a instalacja oparta na przystawce może mieć na nie wpływ.
Nie jestem pewien w 100%, ale czy brakuje cudzysłowów?
FROM phusion/baseimage:0.9.19
RUN echo 'nameserver 10.0.0.1' > /etc/resolv.conf
RUN cat /etc/resolv.conf
Podobne pytania
Nowe pytania
docker
Docker to narzędzie do tworzenia i uruchamiania kontenerów. Przyjmowane są pytania dotyczące plików Dockerfiles, operacji i architektury. Pytania dotyczące uruchamiania dockera w środowisku produkcyjnym mogą znaleźć lepsze odpowiedzi w witrynie ServerFault (https://serverfault.com/). Znacznik Docker jest rzadko używany samodzielnie i często jest łączony z innymi znacznikami, takimi jak docker-compose i kubernetes.