Macos Can';无法从主机到达docker容器内的服务器
我在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
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地址。