问题
I was trying to build a container in Docker for some experiments. Here is my Dockerfile
.
FROM debian
RUN mkdir -p /var/run/sshd
RUN apt-get update
RUN apt-get install -y openssh-server
RUN apt-get install -y sudo
RUN echo AddressFamily inet >> /etc/ssh/sshd_config
ARG username=Rivers
ARG userpasswd=perfectXJ2017
RUN useradd -ms /bin/bash $username && (echo $username:$userpasswd | chpasswd)
RUN adduser $username sudo
CMD /usr/sbin/sshd -D
I tried to build my image with the command sudo docker build -t ics-image .
.
But then I got some error messages and the whole process stopped. Here is the error messages.
Sending build context to Docker daemon 2.048kB
Step 1/11 : FROM debian
---> 8626492fecd3
Step 2/11 : RUN mkdir -p /var/run/sshd
---> Running in 1e1f2dbbe5ca
Removing intermediate container 1e1f2dbbe5ca
---> dd4bec2f81d4
Step 3/11 : RUN apt-get update
---> Running in 022301215bfb
Get:1 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Get:2 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [450 kB]
Err:3 http://deb.debian.org/debian stretch InRelease
Could not resolve 'deb.debian.org'
Err:4 http://deb.debian.org/debian stretch-updates InRelease
Could not resolve 'deb.debian.org'
Fetched 544 kB in 20s (26.9 kB/s)
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/stretch/InRelease Could not resolve 'deb.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/InRelease Could not resolve 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Removing intermediate container 022301215bfb
---> 054d32710b62
Step 4/11 : RUN apt-get install -y openssh-server
---> Running in 802d2fa37b8d
Reading package lists...
Building dependency tree...
Reading state information...
Package openssh-server is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'openssh-server' has no installation candidate
The command '/bin/sh -c apt-get install -y openssh-server' returned a non-zero code: 100
I did all this on Ubuntu 18.04. I cannot understand why this happened and how to solve this problem. Can anyone help?
回答1:
You should first check if you are able to resolve deb.debian.org
from your host in which you are running docker. You can check that with
nslookup deb.debian.org
or dig deb.debian.org
.
If you are not able to resolve the from host add nameserver 8.8.8.8
to your /etc/resolv.conf
file and then try again.
Docker copies nameservers from /etc/resolv.conf
file.
Or you can set the nameserver by creating file /etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
then restart docker service:
$ service docker restart
回答2:
This looks like your docker is not able to resolve the host properly. To check whether docker is able to resolve DNS, execute the below command. In some environments, network admins may block 8.8.8.8. If 8.8.8.8 is blocked use your local DNS IP.
sudo docker run busybox nslookup google.com
sudo docker run --dns 8.8.8.8 busybox nslookup google.com
If the first command doesn't work and second command works fine, then it shows it is a DNS resolution issue. Now edit the /etc/docker/daemon.json and add the DNS server IP that worked for you in the above command.
{
"dns": ["8.8.8.8"]
}
Restart the docker service for the change to take effect using the below command.
service docker restart
Execute the below command to see your docker can now resolve DNS names.
sudo docker run busybox nslookup google.com
回答3:
I was getting a permission error on the socket which prevented DNS from working. sudo apt-get purge --auto-remove apparmor
from this article (https://forums.docker.com/t/can-not-stop-docker-container-permission-denied-error/41142/3) finally resolved it for me. Ubuntu - buster.
来源:https://stackoverflow.com/questions/51034120/docker-could-not-resolve-deb-debian-org