如何使Web服务容器与工作容器通信?

时间:2020-10-10 15:42:09

标签: docker docker-compose containers

我有两个图像。一个使用Go语言编写的Web服务,另一个则使用Ruby worker。 Web服务这样调用工作程序:

func (img image) applyBlur() error {
    blurCommand := exec.Command("ruby", "controller/blurImage.rb", img.path)
    return blurCommand.Run()
} 

如何使两个容器相互连接?

我为图像制作了以下两个Dockerfile(请记住,我刚刚开始学习docker)。

工人:

FROM nvidia/cuda:10.1-base-ubuntu18.04

LABEL version="0.0.1"

LABEL maintainer="mjg"

RUN apt update \
    && apt install -y python3.6 python3-pip \
    && apt install -y ruby

WORKDIR /cvlib

RUN pip3 install --upgrade pip; \
    pip3 install opencv-python tensorflow cvlib; \
    apt install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx; \
    apt remove -y python3-pip

WORKDIR /app

COPY . .

VOLUME [ "/app/blurred-images", "app/source-images" ]

Web服务:

FROM golang:1.15.2

LABEL version="0.0.1"

LABEL maintainer="mjg"

WORKDIR /go/src/github.com/m-goncalves/webservice

COPY server/  server/

COPY cmd/ cmd/

COPY index.html .

RUN GOBIN=/go/bin go install cmd/webservice/webservice.go

ENTRYPOINT /go/bin/webservice

EXPOSE 8080

VOLUME [ "/source-images", "/blurred-images"

1 个答案:

答案 0 :(得分:1)

要在所拥有的容器之间建立连接,必须确保它们在同一网络内。这可以通过在一个docker-compose文件中设置两个容器来实现。您也可以根据需要明确设置网络。

第二个选项是先创建一个docker网络,然后分别启动两个容器,但设置先前创建的公共网络。

有关更多信息,请参考docker compose networking documentation