相关疑难解决方法(0)

Docker Compose在启动Y之前等待容器X.

我使用的RabbitMQ并从一个简单的Python样品在这里 一起泊坞窗-撰写.我的问题是我需要等待rabbitmq完全启动.从我到目前为止搜索到的,我不知道如何等待容器x(在我的情况下是工人)直到y(rabbitmq)开始.

我找到了这个博文,他检查其他主机是否在线.我还发现了这个docker命令:

等待

用法:docker等CONTAINER [CONTAINER ...]

阻止,直到容器停止,然后打印其退出代码.

等待容器停止可能不是我想要的但如果是,是否可以在docker-compose.yml中使用该命令?到目前为止,我的解决方案是等待几秒钟并检查端口,但这是实现此目的的方法吗?如果我不等,我会收到错误.

泊坞窗,compose.yml

worker:
    build: myapp/.
    volumes:
    - myapp/.:/usr/src/app:ro

    links:
    - rabbitmq
rabbitmq:
    image: rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)

python hello sample(rabbit.py):

import pika
import time

import socket

pingcounter = 0
isreachable = False
while isreachable is False and pingcounter < 5:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect(('rabbitmq', 5672))
        isreachable = True
    except socket.error as e:
        time.sleep(2)
        pingcounter += 1
    s.close()

if isreachable:
    connection = pika.BlockingConnection(pika.ConnectionParameters(
            host="rabbitmq"))
    channel = connection.channel()

    channel.queue_declare(queue='hello')

    channel.basic_publish(exchange='', …
Run Code Online (Sandbox Code Playgroud)

docker-compose

271
推荐指数
13
解决办法
18万
查看次数

连接被拒绝:使用 docker-compose 从应用容器访问 Postgres 容器

我是 Docker 的新手。这个项目只是为了我自己的理解。很可能我使用了不正确的术语和/或比我想象的更困惑。感激地接受更正。

我使用了两个 docker 镜像:官方 postgres 镜像和我自己的 Go 应用程序和 Dockerfile。使用docker-compose up我得到connection refused错误。

我认为可能存在两个不同的问题:

  • 一,当应用程序尝试连接时,数据库没有运行。

  • 第二,该应用程序只是使用了无效的 IP。

我有应用程序代码应该让数据库有时间启动以解决第一个潜在问题(请参阅下面的代码)。从错误消息来看,我认为我什至没有走那么远。

我有两个服务:db-access(即 Go 应用程序)和 postgres-db。

我曾尝试在应用程序连接字符串中使用这些主机名:

  • "本地主机",

  • “postgres-db”(因为它在 docker-compose.yml 中命名),

  • “0.0.0.0”。

使用postgres-db作为主机名:

  • 应用程序容器正在尝试:拨打 tcp 172.22.0.2:5432。

  • Postgres 说:侦听 IPv4 地址“0.0.0.0”,端口 5432。

docker-compose.yml我曾尝试使用这些语句:

depends_on:
      - postgres-db
Run Code Online (Sandbox Code Playgroud)

links:
      - postgres-db
Run Code Online (Sandbox Code Playgroud)

我曾尝试颠倒 docker-compose.yml 中服务的顺序,但它们似乎以相同的顺序启动。

当我分别运行 postgres 容器和 Go 应用程序时,我得到了预期的行为。要单独运行它们,我正在使用这些命令:

docker run --rm --name postgres-db -e POSTGRES_PASSWORD=docker -d -p 5432:5432 -v /Users/ForeignFood/Development/go/src/github.com/skillitzimberg/docker/volumes/postgres:/var/lib/postgresql/data postgres

Run Code Online (Sandbox Code Playgroud)

其次是

go run basicapi

我也可以运行docker-compose …

postgresql macos go docker docker-compose

5
推荐指数
1
解决办法
1795
查看次数

标签 统计

docker-compose ×2

docker ×1

go ×1

macos ×1

postgresql ×1