2019-10-31
问题背景
Windows10家庭版中安装docker toolbox 19版本;
安装nginx的Dockerfile的如下
FROM centos:centos7
ENV nginxversion="1.14.0-1" \
os="centos" \
osversion="7" \
elversion="7_4"
RUN yum install -y wget openssl sed &&\
yum -y autoremove &&\
yum clean all &&\
wget http://nginx.org/packages/$os/$osversion/x86_64/RPMS/nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
rpm -iv nginx-$nginxversion.el$elversion.ngx.x86_64.rpm
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.html /data/www/index.html
VOLUME [ "/data/www" ]
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
其中index.html
里面是一条welcome
信息。
在git bash中切换当前目录到Dockerfile所在文件夹,
运行docker build -t local/static_web:latest .
生成对应的image;起一个容器后,利用
docker port
命令可以查看到容器的80端口映射到了宿主机的32773端口。
问题:
– 在容器内curl localhost:80
,能正常显示index.html
的结果
– 在windows宿主机上curl localhost:32773
提示错误
原因与解决
原因在于windows上docker的工作模式是起了一个linux系统,然后容器是基于这个linux虚拟机运行的,所以,32773这个端口,其实是这个linux的端口。
解决: windows上运行powershell,输入docker-machine ip default
获取linux虚拟机的ip,一般默认是192.168.99.100
,然后在浏览器中输入http://192.1687.99.100:32773
,即可显示正常的回显效果。
2019-11-03
为什么nginx启动时,需要默认前台启动
Docker会以pid=1,也就是第一个启动的进程作为判断容器是否存在的依据,守护进程fork新进程时,创建守护进程的进程将退出,容器也会随之退出,因此,需要保持第一个进程始终运行在前台。