Docker插件:从Dockerfile构建过程中访问无人机服务



我正在使用drone/done:0.8和Docker插件,我有点拘泥于我用来构建应用程序的Dockerfile。

这个Dockerfile运行应用程序测试套件,作为其构建过程的一部分-相关片段显示:

# ENV & ARG settings:
ENV RAILS_ENV=test RACK_ENV=test
ARG DATABASE_URL=postgres://postgres:3x4mpl3@postgres:5432/app_test
#  Run the tests:
RUN rails db:setup && rspec

测试套件需要连接到数据库,为此我将postgres服务包含在.drone.yml文件中:

pipeline:
app:
image: plugins/docker
repo: vovimayhem/example-app
tags:
- ${DRONE_COMMIT_SHA}
- ${DRONE_COMMIT_BRANCH/master/latest}
compress: true
secrets: [ docker_username, docker_password ]
use_cache: true
build_args:
- DATABASE_URL=postgres://postgres:3x4mpl3@postgres:5432/app_test
services:
postgres:
image: postgres:9-alpine
environment:
- POSTGRES_PASSWORD=3x4mpl3

但看起来在无人机文件中定义的服务在构建过程中是不可访问的:

Step 18/36 : RUN rails db:setup && rspec
---> Running in 141734ca8f12
could not translate host name "postgres" to address: Name does not resolve
Couldn't create database for {"encoding"=>"unicode", "schema_search_path"=>"partitioning,public", "pool"=>5, "min_messages"=>"log", "adapter"=>"postgresql", "username"=>"postgres", "password"=>"3x4mpl3", "port"=>5432, "database"=>"sibyl_test", "host"=>"postgres"}
rails aborted!
PG::ConnectionBad: could not translate host name "postgres" to address: Name does not resolve

有没有我遗漏的配置?或者这是插件中当前没有的功能?

我知道这可能与docker build命令中的--network和/或--add host选项有关。。。如果你认为我们应该包括这种行为,我可以帮忙。

因此,我突然想到了一些事情(尽管我没有完整的上下文,所以请考虑您认为有意义的内容(

  1. 我可能会将代码的构建/测试部分分离到不同的步骤中,然后使用docker插件发布已经通过的工件
  2. 我认为docker插件真的是为了发布图像(由于dind,我不相信它的容器能够到达服务容器(
  3. 如果您将其分离出来,您可能需要在构建的命令部分使用- sleep 15来给数据库启动时间

http://docs.drone.io/postgres-example/有关于如何使用postgres的例子,但同样,它需要将构建部分与创建和发布docker映像分开:(

这是我说的一个样品;(

pipeline: tests-builds: //Should probably be separate :) image: python:3.6-stretch commands: - sleep 15 //wait for postgrest to start - pip install --upgrade -r requirements.txt - pip install --upgrade -r requirements-dev.txt - pytest --cov=sfs tests/unit - pytest --cov=sfs tests/integration //This tests the db interactio0ns publish: image: plugins/docker registry: quay.io repo: somerepot auto_tag: true secrets: [ docker_username, docker_password ] when: event: [ tag, push ] services: database: image: postgres

相关内容

  • 没有找到相关文章

最新更新