我有以下配置:
Dockerfile
Polynome
run-apache.sh脚本:
toString()
然后我用:
构建图像public class Polynome {
public ArrayList<Term> terms;
@Override
public String toString() {
if (terms != null) {
return terms.toString();
} else {
return "";
}
}
}
然后
FROM centos
MAINTAINER Eduar Tua <eduartua@gmail.com>
RUN yum -y update && yum clean all
RUN yum -y install httpd && yum clean all
RUN echo "Apache works" >> /var/www/html/index.html
EXPOSE 80
ADD run-apache.sh /run-apache.sh
RUN chmod -v +x /run-apache.sh
CMD ["/run-apache.sh"]
之后,当我尝试运行容器接受来自80端口主机的连接时,我得到了这个:
#!/bin/bash
rm -rf /run/httpd/* /tmp/httpd*
exec /usr/sbin/apachectl -D FOREGROUND
任何帮助?
答案 0 :(得分:15)
说端口80正忙...运行此以查看谁正在使用端口80
netstat -tlnp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1380/nginx -g daemo
tcp6 0 0 :::80 :::* LISTEN 1380/nginx -g daemo
滚动到最右边以查看进程保持端口80的违规PID ...其PID 1380所以让我们做一个进程列表来查看该pid
ps -eaf | grep 1380
root 1380 1 0 11:33 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
所以拆除那个冒犯进程以释放端口80
sudo kill 1380 # if you know the pid ( 1380 for example )
__或__
sudo fuser -k 80/tcp # just kill whatever pid is using port 80 tcp
答案 1 :(得分:11)
错误似乎很清楚:
FATA [0002]来自守护程序的错误响应:无法启动容器67ed31b50133adc7c745308058af3a6586a34ca9ac53299d721449dfa4996657:启动userland代理时出错:listen tcp 0.0.0.0:80:bind:地址已在使用中
它说,“地址已在使用中”。这意味着您的系统上的某些东西 - 可能是像Apache这样的Web服务器 - 已经在端口80上进行侦听。您将需要:
-p
参数中选择docker run
或-p
参数。由于Docker无法设置请求的端口转发,因此无法启动容器。
选项(a)和(b)都允许容器绑定到主机上的端口80。只有在您想要从主机以外的其他位置访问容器时才需要这样做。
如果您只想从docker主机访问容器但又不希望在本地网络上公开容器,则选项(c)非常有用。在这种情况下,您将使用docker分配的容器IP地址,您可以通过运行docker inspect
并仔细阅读输出或运行:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_id
答案 2 :(得分:6)
如果您正在运行Ubuntu,只需运行
sudo /etc/init.d/apache2 stop
然后重新加载Docker映像
docker reload
答案 3 :(得分:0)
我找到了解决方法:
$ docker stop container_name
$ docker commit container_name image_name
$ docker rm container_name
然后您可以根据图片创建一个新容器:
$ docker run -d -P --name container_name_the_same_or_new image_name
现在可以使用。