系统环境
- ubuntu 14.04 64bit
- docker 1.6.0
- ghost镜像
操作
- 下载镜像ghost&&自己制作ghost镜像
docker run -it -p 127.0.0.1::2368 ghost bash
- npm start启动ghost成功
- 另起一个shell
docker ps -a
adolph@geek:~$ docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES84802ccaa8f7 ghost:latest "/entrypoint.sh bash 32 seconds ago Up 31 seconds 127.0.0.1:32769->2368/tcp kickass_bell adolph@geek:~$
问题描述
在浏览器输入localhost:32769
后无法连接到资源
想知道到底是哪里除了问题?
ghost的Dockerfile
shell
#build ghost imageFROM adolphlwq/ubuntu:14.04_64_base_imageMAINTAINER adolphlwq <nalan3015@126.com>ENV REFRESHED_AT 2015-6-9RUN apt-get update && apt-get -yqq upgrade#install nodeRUN apt-get install -yqq nodejs npm wget unzip RUN ln -s /usr/bin/nodejs /usr/bin/node#install ghost-zhRUN cd /opt/ && wget http://dl.ghostchina.com/Ghost-0.6.3-zh-full.zip && unzip -uo Ghost-0.6.3-zh-full.zip -d ghost && rm Ghost-0.6.3-zh-full.zip#initial ghostRUN cd /opt/ghost && npm install --production#workdirWORKDIR /opt/ghost/#expose port 2368EXPOSE 2368CMD npm start
然后我又看了Daocloud上ghost的镜像Dockerfile,核心的地方是类似的,不知道我的问题出在哪,端口映射一直失败
daocloud上ghost的Dockerfile
解决方案
ghost文件目录下有个config.example.js
文件用来配置相关参数:
config = { // ### Production // When running Ghost in the wild, use the production environment. // Configure your URL and mail settings here production: { ...... }, server: { host: '0.0.0.0', port: '2368' } },
问题的核心在server项的配置。默认是localhost
好像,一般主机默认的localhost是和127.0.0.1对应的(你也可以在/etc/hosts
修改)。localhost是一个伪造的ip,只能本机访问。0.0.0.0
类似通配符*
的作用,能匹配任意ip。详情见这个回答。
所以你应该修改config.example.js的配置项,把server绑定的地址改为0.0.0.0
就可以了。
最后,我也做了一个ghost的docker image,而且也用nginx配置的代理。使用了Let's Encrypt加密https,你可以参考下: