我在docker中托管着mysql
服务器和go
http服务器。我无法从主机上访问http服务器。我的主机是Mac。
我尝试使用localhost:8080
和ipofserver: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"]
答案 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/