Macos Can';无法从主机到达docker容器内的服务器

Macos Can';无法从主机到达docker容器内的服务器,macos,docker,go,Macos,Docker,Go,我在docker中托管了一个mysql服务器和一个gohttp服务器。我无法从主机访问http服务器。我的主机是mac 我试过使用localhost:8080和ipofserver:8080。我从docker inspect获取ip。我可以从我的主机连接到我的mysql服务器,但是我不能从主机上点击服务器 这是我的docker ps输出 0.0.0.0:8080->8080/tcp 0.0.0.0:3306->3306/tcp, 33060/tcp 以下是我的详细资料: Docke

我在docker中托管了一个
mysql
服务器和一个
go
http服务器。我无法从主机访问http服务器。我的主机是mac

我试过使用
localhost:8080
ipofserver:8080
。我从
docker inspect
获取
ip
。我可以从我的主机连接到我的
mysql
服务器,但是我不能从主机上点击服务器

这是我的
docker ps
输出

0.0.0.0:8080->8080/tcp
0.0.0.0:3306->3306/tcp, 33060/tcp
以下是我的详细资料:

Docker桌面版本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
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"]
服务器dockerfile

FROM mysql:8.0.16

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

EXPOSE 3306
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"]
(此答案基于我们在中的聊天)

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


相关Docker文档:

我有两个猜测:1)您使用自定义网桥网络,端口发布仅适用于默认网桥网络——您可以尝试删除自定义网络配置,并从中“取消”容器(然后默认网桥网络将启动)。我现在无法测试这一点,但我认为这可能是事实。2) web服务器没有响应——您可以通过检查它是否在容器内响应(例如,通过运行类似于
docker compose exec server curl的程序)来验证这一点http://127.0.0.1:8080
@TomaszZieliński执行您的(2)选项有效。将立即尝试1。至于(2),服务器还需要绑定到0.0.0.0,而不是127.0.0.1,否则它不会绑定到网桥接口,因此无论网络设置如何,它在容器外部都不可见。@TomaszZieliński我尝试了(1)次,但不起作用。使用(1)编号(2)仍在工作。Mysql没有绑定到web服务器容器中的127.0.0.1。您应该能够使用
http://mysql:3306
Docker DNS将
mysql
解析为mysql容器的正确IP地址。