我开始将我的项目移动到docker容器中,以便能够开发更多东西而不必过多依赖我使用的操作系统。
这是我运行容器的方式:
docker run -d -v "$(pwd)/app:/app" -v "/c/Users/Geoffrey/Projects/go:/go" --name "server" --link mysql:mysql -p 127.0.0.1:3000:3000 my/server:latest
很快,我的程序执行一个入口点启动我的go app,监听端口3000。
这是与此容器关联的Dockerfile:
##
## Author: Geoffrey Bauduin <bauduin.geo@gmail.com>
##
## Use Ubuntu 14.04
FROM ubuntu:trusty
MAINTAINER Geoffrey Bauduin <bauduin.geo@gmail.com>
ENV DEBIAN_FRONTEND noninteractive
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup
RUN echo "Acquire::http {No-Cache=True;};" > /etc/apt/apt.conf.d/no-cache
RUN echo $'#!/bin/sh\nexit 101' > /usr/sbin/policy-rc.d
RUN chmod +x /usr/sbin/policy-rc.d
## Installing gcc for go
RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
gcc \
libc6-dev \
make \
wget \
git \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
ENV GOLANG_VERSION 1.5.3
ENV GOLANG_DOWNLOAD_URL http://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
RUN wget "$GOLANG_DOWNLOAD_URL" \
&& tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz \
&& rm go1.5.3.linux-amd64.tar.gz
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
EXPOSE 3000
当我从我的Windows主机浏览http://localhost:3000
时,Chrome会返回ERR_CONNECTION_REFUSED
,127.0.0.1
的相同内容,我的网络地址(从ipconfig
返回),甚至是容器地址(docker inspect server | grep IPAddress
)显示相同的错误消息。
但是,当我在容器中执行/bin/bash
,然后curl localhost:3000
时,我可以看到服务器实际上正在预期的端口上运行。
我有什么遗失的东西吗?就像为什么Docker无法在我的机器上绑定任何内容而它没有显示任何错误消息?
非常感谢任何帮助!
答案 0 :(得分:0)
您应该从ASP.NET
更改为MVC
或使用-p 127.0.0.1:3000:3000
代替它们。