Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue when testcontainers is used from within a Docker container #502

Closed
pbillen opened this issue Nov 26, 2017 · 6 comments
Closed

Issue when testcontainers is used from within a Docker container #502

pbillen opened this issue Nov 26, 2017 · 6 comments

Comments

@pbillen
Copy link

pbillen commented Nov 26, 2017

Hi all,

I am facing an interesting problem with testcontainers. I am using the DockerComposeContainer class to start a container for a docker-compose.yml configuration as following:

DockerComposeContainer c = new DockerComposeContainer(... path to docker-compose.yml ...).withLocalCompose(false);
c.starting(null);

Please note the withLocalCompose(false), as it is important.

This works great on my host. However, when my application is started in a docker container, this doesn't work. I am starting my container as following:

docker run -v /var/run/docker.sock:/var/run/docker.sock:ro my-image

Why?

In my-image, the docker-compose.yml is in /app. Now, when c.starting(null) is called, a new child docker-compose container is started, as per withLocalCompose(false). This container is executed in the host, as per -v /var/run/docker.sock:/var/run/docker.sock:ro. But, in my host, there is no /app/docker-compose.yml.

How can we solve this?

One possible solution might be to read and parse /app/docker-compose.yml before starting the child docker-compose container? Either this could be done by (ideally) testcontainers or by myself. In the case of the latter, I should be able to provide the contents of /app/docker-compose.yml to the constructor of DockerComposeContainer.

However, I am not sure if this is the best solution, as I don't have any idea if this is supported by components upstream.

Any ideas?

Thank you!

@bsideup
Copy link
Member

bsideup commented Nov 26, 2017

Hi @pbillen,

Please read this page about staring the tests inside a Docker container:
https://www.testcontainers.org/usage/inside_docker.html

It seems that you're missing -v $PWD:$PWD -w $PWD

@pbillen
Copy link
Author

pbillen commented Nov 26, 2017

Hi @bsideup,

Thank you for tuning in!

I actually thought about this and that will work if the docker-compose.yml is in the host, which is usually the case (that is, usually you are mounting a host directory to the container, as you are doing with -v $PWD:$PWD).

However, in my case, the docker-compose.ymlis not in the host, it is in an arbitrary directory /app in the container. It is part of image my-image. I would rather not mount /app on the host, as this will make it impossible to run several containers concurrently: my-image-2might have a different /app/docker-compose.yml than my-image.

That's why I thought about providing the contents of /app/docker-compose.yml to testcontainers instead of the location.

I hope this makes sense...

@kiview
Copy link
Member

kiview commented Nov 29, 2017

Yes, this is a problem with the current implementation, that's why we are using a local docker-compose at my workplace if used inside our (docker based) CI environment.

Another solution might involve dynamically creating volumes and mounting them at the appropriate locations. Not sure if the would overshadow the existing content though?

@pbillen
Copy link
Author

pbillen commented Dec 9, 2017

Hi @kiview,

Thanks for your feedback.

Are there plans to support this flow? A local docker-compose would work indeed, but I believe it would be useful if we could remain using the dockerized docker-compose, so dependencies on the specific environment/usage remain not relevant. But good idea nonetheless, I will start using the local docker-compose on CI for now.

With regards to your alternative solution: that's a good idea. I will try this out in the next days. I will keep you updated.

Thanks again!

@kiview
Copy link
Member

kiview commented Dec 9, 2017

Hi @pbillen,

we are currently planning on rewriting the core of testcontainters to become JUnit4 independent (you can see the design progress here: rnorth/containercore#1). This will be part of testcontainers 2.0. I'm quite optimistic that we'll also be able to implement a more simple docker-compose integration to cater for such use cases.

Do you think we can close this issue or should we clarify something in the docs regarding your misunderstanding?

@pbillen
Copy link
Author

pbillen commented Dec 9, 2017

Hi @kiview,

Testcontainer 2.0, interesting :). Already looking forward to it!

I think this issue can be closed, the docs are quite clear.

Thanks @kiview and @bsideup for feedback!

@pbillen pbillen closed this as completed Dec 9, 2017
rnorth pushed a commit that referenced this issue Dec 24, 2018
Bumps [influxdb-java](https://github.com/influxdata/influxdb-java) from 2.10 to 2.14.
<details>
<summary>Changelog</summary>

*Sourced from [influxdb-java's changelog](https://github.com/influxdata/influxdb-java/blob/master/CHANGELOG.md).*

> ## 2.14 [2018-10-12]
> 
> ### Fixes
> 
> - Fixed chunked query exception handling [Issue #523](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/523)
> - Memory leak in StringBuilder cache for Point.lineprotocol() [Issue #526](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/521)
> 
> ## 2.13 [2018-09-12]
> 
> ### Fixes
> - MessagePack queries: Exception during parsing InfluxDB version [macOS] [PR #487](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/487)
> - The InfluxDBResultMapper is able to handle results with a different time precision [PR #501](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/501)
> - UDP target host address is cached [PR #502](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/502)
> - Error messages from server not parsed correctly when using msgpack [PR #506](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/506)
> - Response body must be closed properly in case of JSON response [PR #514](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/514)
> - Time is serialized not consistently in MsgPack and Json, missing millis and nanos in MsgPack[PR #517](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/517)
> 
> ### Features
> 
> - Support for Basic Authentication [PR #492](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/492)
> - Added possibility to reuse client as a core part of [influxdb-java-reactive](https://github.com/bonitoo-io/influxdb-java-reactive) client [PR #493](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/493)
> - Retry capability for writing of BatchPoints [PR #503](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/503)
> - Added `BiConsumer` with capability to discontinue a streaming query [Issue #515](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/515)
> - Added `onComplete` action that is invoked after successfully end of streaming query [Issue #515](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/515)
> 
> ## 2.12 [2018-07-31]
> 
> ### Fixes
> 
> - Remove code which checks for unsupported influxdb versions [PR #474](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/474)
> - Unpredictable errors when OkHttpClient.Builder instance is reused [PR #478](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/478)
> 
> ### Features
> 
> - Support for MessagePack [PR #471](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/471)
> - Cache version per influxdb instance and reduce ping() calls for every query call [PR #472](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/472)
> - FAQ list for influxdb-java [PR #475](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/475)
> 
> ### Improvements
> 
> - Test: Unit test to ensure tags should be sorted by key in line protocol (to reduce db server overheads) [PR #476](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/476)
> 
> ## 2.11 [2018-07-02]
> 
> ### Features
> 
> - Allow write precision of TimeUnit other than Nanoseconds [PR #321](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/321)
> - Support dynamic measurement name in InfluxDBResultMapper [PR #423](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/423)
> - Debug mode which allows HTTP requests being sent to the database to be logged [PR #450](https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/450)
> - Fix problem of connecting to the influx api with URL which does not points to the url root (e.g. localhots:80/influx-api/) [PR #400] (https://github-redirect.dependabot.com/influxdata/influxdb-java/pull/400)
></table> ... (truncated)
</details>
<details>
<summary>Commits</summary>

- [`91d0f09`](influxdata/influxdb-java@91d0f09) [maven-release-plugin] prepare release influxdb-java-2.14
- [`8ffaeb9`](influxdata/influxdb-java@8ffaeb9) Revert "[maven-release-plugin] prepare release influxdb-java-2.14"
- [`2781da2`](influxdata/influxdb-java@2781da2) [maven-release-plugin] prepare release influxdb-java-2.14
- [`19c69ed`](influxdata/influxdb-java@19c69ed) [maven-release-plugin] prepare for next development iteration
- [`c6d7f25`](influxdata/influxdb-java@c6d7f25) [maven-release-plugin] prepare release influxdb-java-2.14
- [`2f4c594`](influxdata/influxdb-java@2f4c594) Merge pull request [#531](https://github-redirect.dependabot.com/influxdata/influxdb-java/issues/531) from heshengbang/master
- [`f653e62`](influxdata/influxdb-java@f653e62) Easy to use try-with-resources, add README.md
- [`c7be9b0`](influxdata/influxdb-java@c7be9b0) Easy to use try-with-resources
- [`4590d18`](influxdata/influxdb-java@4590d18) - added automated SNAPSHOT publishing to Maven Central repository
- [`ce65a41`](influxdata/influxdb-java@ce65a41) - added automated SNAPSHOT publishing to Maven Central repository
- Additional commits viewable in [compare view](influxdata/influxdb-java@influxdb-java-2.10...influxdb-java-2.14)
</details>
<br />

[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=org.influxdb:influxdb-java&package-manager=gradle&previous-version=2.10&new-version=2.14)](https://dependabot.com/compatibility-score.html?dependency-name=org.influxdb:influxdb-java&package-manager=gradle&previous-version=2.10&new-version=2.14)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

You can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in the `.dependabot/config.yml` file in this repo:
- Update frequency (including time of day and day of week)
- Automerge options (never/patch/minor, and dev/runtime dependencies)
- Pull request limits (per update run and/or open at any time)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)

Finally, you can contact us by mentioning @dependabot.

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants