Docker未正确绑定Windows上的端口

时间:2016-02-05 13:16:36

标签: windows ubuntu networking docker

我开始将我的项目移动到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_REFUSED127.0.0.1的相同内容,我的网络地址(从ipconfig返回),甚至是容器地址(docker inspect server | grep IPAddress)显示相同的错误消息。 但是,当我在容器中执行/bin/bash,然后curl localhost:3000时,我可以看到服务器实际上正在预期的端口上运行。

我有什么遗失的东西吗?就像为什么Docker无法在我的机器上绑定任何内容而它没有显示任何错误消息?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您应该从ASP.NET更改为MVC或使用-p 127.0.0.1:3000:3000代替它们。