无法从主机访问docker容器内的服务器

时间:2019-06-09 12:55:31

标签: macos docker go

我在docker中托管着mysql服务器和go http服务器。我无法从主机上访问http服务器。我的主机是Mac。

我尝试使用localhost:8080ipofserver:8080。我从ip获得了docker inspect。我可以从主机连接到mysql服务器,但是无法从主机访问服务器。

这是我的docker ps输出。

0.0.0.0:8080->8080/tcp
0.0.0.0:3306->3306/tcp, 33060/tcp

以下是我的详细信息:

Docker Desktop版本2.0.0.3。

docker-compose

version: '3.1'

services:

    mysql:
        image: mysql:latest
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: mydb
        volumes:
            - mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        networks:
            - mynetwork

    server:
        image: server:latest
        networks:
             - mynetwork
        ports:
             - "8080:8080"

volumes:
    mysql: ~

networks:
    mynetwork:
        driver: "bridge"

mysql dockerfile

FROM mysql:8.0.16

COPY ./scripts/mysql/dbgen-v1.sql /docker-entrypoint-initdb.d/

EXPOSE 3306

服务器dockerfile

FROM golang:1.12.5

WORKDIR a/go/path
COPY . .

ENV GOBIN=/usr/local/bin

RUN go get github.com/go-sql-driver/mysql
RUN go get github.com/iancoleman/strcase
RUN go get github.com/jmoiron/sqlx
RUN go get github.com/spf13/cobra
RUN go get github.com/gorilla/websocket
RUN go get github.com/spf13/viper

RUN go install -v cmd/project/main.go

EXPOSE 8080

CMD ["main"]

1 个答案:

答案 0 :(得分:1)

(此答案基于我们在the comments中进行的聊天)

为了将Web服务器从容器内部暴露给主机,它需要绑定到0.0.0.0而不是127.0.0.1。使用0.0.0.0可确保Web服务器绑定到可以从主机端访问的网桥接口。

相关Docker文档:https://docs.docker.com/v17.09/engine/userguide/networking/default_network/binding/