docker - docker 中的 jekyll 站点在本地服务
问题描述
我正在尝试使用 vim 和 github 在本地使用 jekyll 站点,所有这些都在我的 Windows 10 机器上的 docker 容器中。我想在容器中工作,就像它是一个 linux 虚拟机一样,我的下载目录作为一个卷,jekyll 在端口 55 上提供服务。
我的码头初始化是
docker container run -t -d -p 55:4000 -v ${PWD}:"/home/Downloads/" [container ID]
要启动 jekyll 站点,我在 docker 容器中运行以下命令
jekyll new my-awesome-site
cd my-awesome-site
bundle exec jekyll serve
...
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
我究竟做错了什么?
这是我的 Dockerfile
FROM: ubuntu:latest
RUN apt-get update && apt-get -y upgrade
RUN apt-get install -y git && apt-get install -y software-properties-common
RUN apt-get install -y python-pip python-dev ruby-full build-essential
RUN pip install --upgrade pip
RUN apt-get install -y vim
# build ruby configuration
RUN mkdir gems \
&& echo '# Install Ruby Gems to /gems' >> /gems/.bashrc \
&& echo 'export GEM_HOME=/gems' >> /gems/.bashrc \
&& echo 'export PATH=/gems/bin:$PATH' >> /gems/.bashrc \
&& /bin/bash -c "source /gems/.bashrc"
# install jekyll
RUN gem install jekyll bundler
EXPOSE 4000
WORKDIR /home/work
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e25f6359ce49 572 "/bin/bash" 28 minutes ago Up 28 minutes 0.0.0.0:55->4000/tcp loving_gagarin
解决方案
利用bundle exec jekyll serve --host 0.0.0.0
这个特殊的主机会告诉 jekyll 在所有接口上服务,以便 docker 可以将悲剧传递给外界。
附带说明一下,不要使用小于 1024 的端口,这可能会导致意想不到的麻烦。
推荐阅读
- hadoop - Hadoop安装问题:权限被拒绝
- file-upload - Shopify 生成的对谷歌云存储签名 URL 的 PUT 请求引发错误 MalformedSecurityHeader
- swift - 在 isContinuous 为真时捕获 UISlider 中的最后一个值
- java - 将两个流写入一个文件(非并发)
- html - 如何使用我的域链接我的网站页面?
- python - 如何使用 pytest 模拟在 __init__ 方法下初始化的对象
- java - Broadleafcommerce XSRF 令牌不匹配
- c# - 如何使用 DI 和服务模式在客户端应用程序中处理来自 api 的访问被拒绝或未经授权的响应
- sql - SQL 如何根据另一列的值标记给定的 sessionID
- java - 如何在java中使用REST API获取POST请求的请求体