我的dock-compose.yml看起来像这个
services:
goporxy:
image: goproxy/goproxy
container_name: goporxy
hostname: goporxy
restart: always
volumes:
- ./goporxy:/go
ports:
- "80:8081"
goserver:
build:
context: ./
dockerfile: ./Dockerfile
container_name: goserver
hostname: goserver
restart: always
depends_on:
- goporxy
如果建立它,得到错误
go: github.com/Joker/hpp@v1.0.0: Get "http://host.docker.internal:80/github.com/%21joker/hpp/@v/v1.0.0.mod": dial tcp 192.168.65.2:80: connect: connection refused
但如果我在docker-compose up
之前运行docker run -d -p80:8081 goproxy/goproxy
,并在docker-compose.yml 中删除goporxy
goporxy纠正功能并开始下载依赖项
(在goserver Dockerfile中,我设置了类似RUN go env -w GOPROXY=http://host.docker.internal:80,direct
的goproxy(
我想用docker compse同时做两件事,怎么办?
docker compose syas:dependens_on在启动web之前不会等待db和redis"就绪",只会等到它们启动之后。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息和解决策略
以下是详细信息:[https://docs.docker.com/compose/startup-order/]
实际上,您可以在容器开始执行命令之前运行shell。shell将ping api或访问您的web来判断容器是否准备好,然后启动真正的服务。有现成的解决方案。SH脚本被称为";等待";。只需下载shell并将其添加到dockerfile 中
RUN apt-get -q update && apt-get -qy install netcat
然后将其添加到docker-compose.yml 中
command: sh -c './wait-for.sh "the server depended:port" -- "the code run the server"'