2016-02-05 56 views
0

我開始將我的項目移動到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

很快,我的程序執行的入口點啓動我去的應用程序,監聽端口3000

這裏是Dockerfile與此相關的容器:

## 
## Author: Geoffrey Bauduin <[email protected]> 
## 

## Use Ubuntu 14.04 
FROM ubuntu:trusty 

MAINTAINER Geoffrey Bauduin <[email protected]> 

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 

當我瀏覽http://localhost:3000從我的windows主機,瀏覽器返回ERR_CONNECTION_REFUSED,相同的東西127.0.0.1,我的網絡地址(從ipconfig返回),甚至容器地址(docker inspect server | grep IPAddress)顯示相同的錯誤消息。 但是,當我在容器中執行/bin/bash,然後執行curl localhost:3000時,我可以看到服務器實際上正在預期的端口上運行。

有什麼我失蹤了嗎?就像爲什麼Docker無法綁定我的機器上的任何東西,但它不顯示任何錯誤消息?

任何幫助將不勝感激!

回答

0

您應該從-p 127.0.0.1:3000:3000更改爲-p 3000:3000或使用-P而不是他們。