我试图在Docker中构建一个容器以进行一些实验。这是我的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
我尝试使用命令sudo docker build -t ics-image .
构建映像。
但是随后我收到一些错误消息,整个过程停止了。这是错误消息。
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
我在Ubuntu 18.04上完成了所有这些工作。我不明白为什么会这样以及如何解决这个问题。有人可以帮忙吗?
答案 0 :(得分:7)
这不能解决根本问题,但是我成功地将--network=host
添加到了docker build命令中,例如sudo docker build --network=host -t ics-image .
。就我而言,/etc/resolve.conf
中的所有内容都是正确的,但是docker使用正确的ip表存在问题,这是一种快速的解决方法。同样,这不是解决方案,但可以帮助调试问题。
答案 1 :(得分:3)
您应该首先检查是否能够从运行docker的主机中解析deb.debian.org
。你可以用
nslookup deb.debian.org
或dig deb.debian.org
。
如果无法从主机解析,请将nameserver 8.8.8.8
添加到/etc/resolve.conf
文件中,然后重试。
Docker从/etc/resolve.conf
文件复制名称服务器。
或者您可以通过创建文件/etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
然后重新启动docker服务
service docker restart
答案 2 :(得分:1)
这似乎是您的docker无法正确解析主机。要检查docker是否能够解析DNS,请执行以下命令。在某些环境中,网络管理员可能会阻止8.8.8.8。如果8.8.8.8被阻止,请使用本地DNS IP。
sudo docker run busybox nslookup google.com
sudo docker run --dns 8.8.8.8 busybox nslookup google.com
如果第一个命令不起作用,第二个命令正常,则表明它是DNS解析问题。现在,编辑/etc/docker/daemon.json并在上面的命令中添加对您有用的DNS服务器IP。
{
"dns": ["8.8.8.8"]
}
使用以下命令重新启动docker服务以使更改生效。
service docker restart
执行以下命令,以查看docker现在可以解析DNS名称。
sudo docker run busybox nslookup google.com
答案 3 :(得分:0)
我在套接字上收到一个权限错误,导致DNS无法正常工作。本文{https://forums.docker.com/t/can-not-stop-docker-container-permission-denied-error/41142/3中的sudo apt-get purge --auto-remove apparmor
终于为我解决了。 Ubuntu-破坏者。