在 Mac 平台下搭建docker - nginx

一个老生常谈的内容,初学 docker 都会搭建一个 nginx 练习,网上资料一抓一大把。那为什么有这篇文章呢,因为我碰到了一个问题,一个端口引发的知识填坑。

先搞镜像

docker pull nginx

查看 nginx 镜像里面配置文件、日志文件的具体位置

这里有些关键的位置需要挂载到外头

  1. 配置文件 /etc/nginx/nginx.conf
  2. 配置文件 /etc/nginx/conf.d/default.conf
  3. 默认首页文件夹 /usr/share/nginx/html
  4. 日志文件 /var/log/nginx
先创建对应挂载目录:
$ ls DockerVolume/nginx
conf   conf.d html   logs

conf 文件夹中创建 nginx.conf 配置文件;

把镜像中的配置文件全部拷贝进去

# docker run -i -t nginx /bin/bash
# more /etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

conf.d 文件夹中创建 default.conf 配置文件

把镜像中的配置文件全部拷贝进去

# docker run -i -t nginx /bin/bash
# more /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

随便搞个 index.html 首页丢进去 html 文件夹
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover">
    <title>nginx</title>
  </head>
  <body>
    <h1>欢迎使用nginx!</h1>
  </body>
</html>

准备工作已完成,创建容器并挂载

docker run -d -p 5000:80 \
-v /Users/sayyid/DockerVolume/nginx/html:/usr/share/nginx/html \
-v /Users/sayyid/DockerVolume/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/sayyid/DockerVolume/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /Users/sayyid/DockerVolume/nginx/logs:/var/log/nginx \ 
--name nginx nginx  \

查看是否启动成功

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
51e49881e7f9        nginx               "nginx -g 'daemon of…"   15 hours ago        Up 15 hours         0.0.0.0:6000->80/tcp   nginx

出现问题

我一开始开的是 6000 端口进行映射,浏览器访问就是加载不出来,但是 curl 可以获取到数据,edge、chrome、safari 都不能访问。

$ curl http://localhost:6000
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover">
    <title>nginx</title>
  </head>
  <body>
    <h1>欢迎使用nginx!</h1>
  </body>
</html>

edge 错误内容: 似乎http://localhost:6000/ 上的网页可能有问题,或者该网页可能已永久移到新的网址。 错误代码:ERR_UNSAFE_PORT

safari 错误内容: Not allowed to use restricted network port 错误代码:WebKitErrorDomain:103

找了半天发现是 6000 端口的事情,浏览器阻塞某些端口,尽管它们不在系统端口范围内,其中一些端口广泛用于本地 Web 开发.

从网上找了资料记录一下避免下次再犯这种错误:

# 系统预留

端口号可以分为三个范围:“已知端口”、“注册端口”以及“动态和/或专用端口”。
“已知端口”是从 0 到 1023 的端口。
“注册端口”是从 1024 到 49151 的端口。
“动态和/或专用端口”是从 49152 到 65535 的端口。理论上,不应为服务分配这些端口。

# chrome 浏览器预留(不完全统计)

功能描述 - 端口号
tcpmux - 1
echo - 7
discard - 9
systat - 11
daytime - 13
netstat - 15
qotd - 17
chargen - 19
ftp data - 20
ftp access - 21
ssh - 22
telnet - 23
smtp - 25
time - 37
name - 42
nicname - 43
domain - 53
priv-rjs - 77
finger - 79
ttylink - 87
supdup - 95
hostriame - 101
iso-tsap - 102
gppitnp - 103
acr-nema - 104
pop2 - 109
pop3 - 110
sunrpc - 111
auth - 113
sftp - 115
uucp-path - 117
nntp - 119
NTP - 123
loc-srv /epmap - 135
netbios - 139
imap2 - 143
BGP - 179
ldap - 389
smtp+ssl - 465
exec - 512
login - 513
shell - 514
printer - 515
tempo - 526
courier - 530
chat - 531
netnews - 532
uucp - 540
remotefs - 556
nntp+ssl - 563
stmp? - 587
ldap+ssl - 636
ldap+ssl - 993
pop3+ssl - 995
nfs - 2049
PasswordServer - 3659
lockd - 4045
X11 - 6000
Alternate IRC [Apple addition] - 6665
Alternate IRC [Apple addition] - 6666
Standard IRC [Apple addition] - 6667
Alternate IRC [Apple addition] - 6668
Alternate IRC [Apple addition] - 6669

扩展知识

检查 dokcer IP:

docker inspect nginx
docker inspect --format='{{.NetworkSettings.IPAddress}}' nginx

复制文件:

docker cp nginx:/etc/nginx/nginx.conf /Users/sayyid/DockerVolume/nginx/conf/nginx.conf
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容