我猜这是个问题。
我对circleci很满意,但现在我遇到了一个问题,我不知道自己做错了什么。 也许这很容易,但我看不到它。
我不能让容器在circleci上相互交谈。
基本上我想要做的是启动服务器容器和客户端容器,然后让它们相互通信。 我在这里创建了一个最小的例子:https://github.com/mRcSchwering/circleci-integration-test
README.md
基本上解释了预期的结果。
我有.circleci/config.yml
这样的话:
version: 2
jobs:
build:
docker:
- image: docker:18.03.0-ce-git
steps:
- checkout
- setup_remote_docker
- run:
name: Install docker-compose
command: |
apk --update add py2-pip
/usr/bin/pip2 install docker-compose
docker-compose --version
- run:
name: Start Container
command: |
docker-compose up -d
docker-compose ps
- run:
name: Let client talk to server
command: |
docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
在泊坞窗容器中,安装了docker-compose
,然后用于启动server
和client
(此处为postgres)。在最后一步中,我告诉client
查询server
。但是,找不到server
:
#!/bin/sh -eo pipefail
docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
Starting project_server_1 ...
^@^@psql: could not connect to server: Connection refused
Is the server running on host "server" (172.18.0.2) and accepting
TCP/IP connections on port 5432?
Exited with code 2
docker-compose.yml
看起来像这样
version: '2'
services:
server:
image: postgres:9.5.12-alpine
networks:
- internal
expose:
- '5432'
client:
build:
context: .
networks:
- internal
depends_on:
- server
networks:
internal:
driver: bridge
其中client
是从像这样的dockerfile构建的
FROM alpine:3.7
RUN apk --no-cache add postgresql-client && rm -rf /var/cache/apk/*
如果我在我的Linux上重复所有内容(也使用docker-in-docker)它可以正常工作。 但我猜有些事情在circleci上完全不同。 我发现有些人提到在circleci网络和绑定坐骑可能会很棘手,但我找不到任何可以帮助我的东西。 有这个doc,但我想我已经这样做了。 然后有this project有人似乎成功地在circleci上做同样的事情。 但我无法弄清楚那里有什么不同......
无论如何,我真的很感谢你的帮助。到目前为止,我已经放弃了这一点。
最佳马克
答案 0 :(得分:0)
好的,同时我(实际上它不是来自circleci论坛的 halfer )注意到docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
在服务器启动并运行之前运行。 sleep 5
之后的简单docker-compose up -d
解决了问题。