# Elastic APM Not accessible outside docker container

**URL:** <https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026>\
**Category:** APM\
**Tags:** docker, nodejs, open-telemetry\
**Created:** [July 30, 2022, 7:20am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026 "2022-07-30T07:20:30Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [July 30, 2022, 7:20am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/1 "2022-07-30T07:20:30Z")

</div>

**Describe the bug**  
OTEL Collector not able to connect to elastic-apm

**Steps to reproduce**

Please follow the instructions here, it is simple App

> **[GitHub - sathishsoundharajan/otel-elastic-apm: Open telemetry Elastic APM...](https://github.com/sathishsoundharajan/otel-elastic-apm)**
>
> Open telemetry Elastic APM & Collector. Contribute to sathishsoundharajan/otel-elastic-apm development by creating an account on GitHub.

**What did you expect to see?**  
i'm expecting to see the tracing logs to be sent both to zipkin and elastic-apm server.

**What did you see instead?**

```auto
otel-collector | 2022-07-29T14:39:44.207Z	error	exporterhelper/queued_retry.go:149	Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors	{"kind": "exporter", "data_type": "traces", "name": "elastic", "error": "sending event request failed: Post \"http://elastic-apm:8200/intake/v2/events\": dial tcp 192.168.32.6:8200: connect: connection refused", "errorVerbose": "Post \"http://elastic-apm:8200/intake/v2/events\": dial tcp 192.168.32.6:8200: connect: connection refused\nsending event request failed\ngo.elastic.co/apm/transport.(*HTTPTransport).sendStreamRequest\n\tgo.elastic.co/apm@v1.15.0/transport/http.go:292\ngo.elastic.co/apm/transport.(*HTTPTransport).SendStream\n\tgo.elastic.co/apm@v1.15.0/transport/http.go:282\ngithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter.(*elasticExporter).sendEvents\n\tgithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter@v0.56.0/exporter.go:197\ngithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter.(*elasticExporter).ExportResourceSpans\n\tgithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter@v0.56.0/exporter.go:149\ngithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter.newElasticTracesExporter.func1\n\tgithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticexporter@v0.56.0/exporter.go:53\ngo.opentelemetry.io/collector/exporter/exporterhelper.(*tracesRequest).export\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:70\ngo.opentelemetry.io/collector/exporter/exporterhelper.(*timeoutSender).send\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/common.go:225\ngo.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry.go:147\ngo.opentelemetry.io/collector/exporter/exporterhelper.(*tracesExporterWithObservability).send\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:134\ngo.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).send\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry.go:83\ngo.opentelemetry.io/collector/exporter/exporterhelper.NewTracesExporter.func2\n\tgo.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:113\ngo.opentelemetry.io/collector/consumer.ConsumeTracesFunc.ConsumeTraces\n\tgo.opentelemetry.io/collector@v0.56.0/consumer/traces.go:36\ngo.opentelemetry.io/collector/service/internal/fanoutconsumer.(*tracesConsumer).ConsumeTraces\n\tgo.opentelemetry.io/collector@v0.56.0/service/internal/fanoutconsumer/traces.go:75\ngo.opentelemetry.io/collector/processor/batchprocessor.(*batchTraces).export\n\tgo.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:262\ngo.opentelemetry.io/collector/processor/batchprocessor.(*batchProcessor).sendItems\n\tgo.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:176\ngo.opentelemetry.io/collector/processor/batchprocessor.(*batchProcessor).startProcessingCycle\n\tgo.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:143\nruntime.goexit\n\truntime/asm_amd64.s:1571"}
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry.go:149
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*tracesExporterWithObservability).send
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:134
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).send
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry.go:83
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.NewTracesExporter.func2
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:113
otel-collector | go.opentelemetry.io/collector/consumer.ConsumeTracesFunc.ConsumeTraces
otel-collector | go.opentelemetry.io/collector@v0.56.0/consumer/traces.go:36
otel-collector | go.opentelemetry.io/collector/service/internal/fanoutconsumer.(*tracesConsumer).ConsumeTraces
otel-collector | go.opentelemetry.io/collector@v0.56.0/service/internal/fanoutconsumer/traces.go:75
otel-collector | go.opentelemetry.io/collector/processor/batchprocessor.(*batchTraces).export
otel-collector | go.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:262
otel-collector | go.opentelemetry.io/collector/processor/batchprocessor.(*batchProcessor).sendItems
otel-collector | go.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:176
otel-collector | go.opentelemetry.io/collector/processor/batchprocessor.(*batchProcessor).startProcessingCycle
otel-collector | go.opentelemetry.io/collector@v0.56.0/processor/batchprocessor/batch_processor.go:143

```

**What version did you use?**  
otel/otel-collector-contrib:Latest docker-image.. Please check the docker-compose.yml file mentioned in the above repo.

**Environment**  
Docker

**Additional context**  
What I'm trying to do is setup small node.js application

1. Collect the traces via OTEL Collector
2. Make sure OTEL Collector sends data to Zipkin and as well as Elastic APM

---

<div class="post-metadata">

**Author:** ![axw](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/axw/32/28197_2.png) [@axw](https://discuss.elastic.co/u/axw)\
**Post date:** [August 1, 2022, 1:54am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/2 "2022-08-01T01:54:59Z")

</div>

Hi @sathishsoundharajan, welcome to the community!

By default, APM Server listens for requests only on localhost, which won't work as expected within a Docker container. The Docker image ships with an apm-server.yml configuration file which overrides this default so that it listens on all network interfaces: [apm-server/apm-server.docker.yml at d3858a1143e1736d6dd2ff79f153a4686bca45dd · elastic/apm-server · GitHub](https://github.com/elastic/apm-server/blob/d3858a1143e1736d6dd2ff79f153a4686bca45dd/apm-server.docker.yml#L7)

As you are replacing the configuration file, this override is being lost. What you should do is modify your apm-server.yml slightly to set `apm-server.host: 0.0.0.0:8200`.

I also noticed that you're using the "elastic" exporter from opentelemetry-collector-contrib. This exporter is deprecated, and I would strongly recommend using the OTLP exporter. APM Server natively supports OTLP/gRPC and OTLP/HTTP. For some example configuration, see [OpenTelemetry integration | APM User Guide [8.3] | Elastic](https://www.elastic.co/guide/en/apm/guide/current/open-telemetry.html#connect-open-telemetry-collector)

---

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [August 1, 2022, 5:05am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/3 "2022-08-01T05:05:11Z")

</div>

@axw Thank you for the solution. It works 👍 . About the "elastic" exporter. We are running elasticsearch version 6.8.x in production and kibana also similar to that version. Will add exact version info sooner.. So can i run APM latest version 8.3 and elastic 6.x ? Also can i run APM version 6.8 itself and use oltp/elastic exporter ?

---

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [August 1, 2022, 7:01am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/4 "2022-08-01T07:01:06Z")

</div>

@axw Seems for the below configuration, data is getting dropped because of this error

```auto
receivers:
  zipkin:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch: 
    timeout: 10s

exporters:
  logging:
    logLevel: debug
    
  zipkin:
    endpoint: "http://zipkin:9411/api/v2/spans"

  otlp/elastic:
    endpoint: http://elastic-apm:8200
    tls:
      insecure: true

extensions:
  health_check:

service:
  extensions: [health_check]

  pipelines:
  
    # metrics:
    # receivers: [otlp]

    traces:
      receivers: [zipkin, otlp]
      processors: [batch]
      exporters: [zipkin, otlp/elastic]

```

APM Version Remains: 6.8.11

```auto
otel-collector | 2022-08-01T06:56:15.499Z	error	exporterhelper/queued_retry_inmemory.go:107	Exporting failed. No more retries left. Dropping data.	{"kind": "exporter", "data_type": "traces", "name": "otlp/elastic", "error": "max elapsed time expired rpc error: code = Unavailable desc = connection closed before server preface received", "dropped_items": 13}
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.onTemporaryFailure
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry_inmemory.go:107
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry.go:199
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*tracesExporterWithObservability).send
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/traces.go:134
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/queued_retry_inmemory.go:119
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper/internal.consumerFunc.consume
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/internal/bounded_memory_queue.go:82
otel-collector | go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func2
otel-collector | go.opentelemetry.io/collector@v0.56.0/exporter/exporterhelper/internal/bounded_memory_queue.go:69

```

---

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [August 1, 2022, 10:09am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/5 "2022-08-01T10:09:12Z")

</div>

@axw This is error i'm getting when i start the container with docker-compose.yml

```auto
otel-collector | 2022-08-01T10:04:18.540Z	info	service/collector.go:215	Starting otelcol-contrib...	{"Version": "0.56.0", "NumCPU": 4}
otel-collector | 2022-08-01T10:04:18.540Z	info	service/collector.go:128	Everything is ready. Begin running and processing data.
otel-collector | 2022-08-01T10:04:19.330Z	warn	zapgrpc/zapgrpc.go:191	[core] [Channel #1 SubChannel #2] grpc: addrConn.createTransport failed to connect to {
otel-collector | "Addr": "elastic-apm:8200",
otel-collector | "ServerName": "elastic-apm:8200",
otel-collector | "Attributes": null,
otel-collector | "BalancerAttributes": null,
otel-collector | "Type": 0,
otel-collector | "Metadata": null
otel-collector | }. Err: connection error: desc = "transport: Error while dialing dial tcp: lookup elastic-apm on 127.0.0.11:53: no such host"	{"grpc_log": true}

```

I tried with latest APM Server too

---

<div class="post-metadata">

**Author:** ![axw](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/axw/32/28197_2.png) [@axw](https://discuss.elastic.co/u/axw)\
**Post date:** [August 2, 2022, 5:50am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/6 "2022-08-02T05:50:10Z")

</div>

> [@sathishsoundharajan](#):
>
> We are running elasticsearch version 6.8.x in production and kibana also similar to that version. Will add exact version info sooner.. So can i run APM latest version 8.3 and elastic 6.x ? Also can i run APM version 6.8 itself and use oltp/elastic exporter ?

I see. APM Server 8.x is not compatible with Elasticsearch/Kibana 6.x, and APM Server 6.8 does not support OTLP.

> This is error i'm getting when i start the container with docker-compose.yml

"transport: Error while dialing dial tcp: lookup elastic-apm on 127.0.0.11:53: no such host" suggests something is wrong with your docker-compose.yml, it's not an issue with APM Server. (I had a quick look but didn't spot an obvious mistake in your repo.)

---

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [August 2, 2022, 6:23am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/7 "2022-08-02T06:23:49Z")

</div>

Thanks for inputs.. @axw .. So my only choice is to run OTLP Collector with APM Server 6.x, Elasticsearch 6.x, Kibana 6.x.

If the transport error is fixed, then i can try to use `otlp/elastic` as exporter along with above versions.

> [@axw](#):
>
> transport: Error while dialing dial tcp: lookup elastic-apm on 127.0.0.11:53: no such host

For the transport error, I'm also trying to figure out what could be the issue. It seems to occur only for `otlp/elastic` exporter alone..

---

<div class="post-metadata">

**Author:** ![sathishsoundharajan](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/sathishsoundharajan/32/109045_2.png) [@sathishsoundharajan](https://discuss.elastic.co/u/sathishsoundharajan)\
**Post date:** [August 2, 2022, 4:52pm UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/8 "2022-08-02T16:52:23Z")

</div>

@axw Apologies!. Can't figure out why the transport error getting triggered.. Any pointers with respect to that would be much helpful for me..

---

<div class="post-metadata">

**Author:** ![axw](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/axw/32/28197_2.png) [@axw](https://discuss.elastic.co/u/axw)\
**Post date:** [August 3, 2022, 1:27am UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/9 "2022-08-03T01:27:39Z")

</div>

@sathishsoundharajan just reiterating:

> I see. APM Server 8.x is not compatible with Elasticsearch/Kibana 6.x, and APM Server 6.8 does not support OTLP.

Because APM Server 6.8 does not support OTLP, you cannot use `otlp/elastic`. You will need to use the deprecated `elastic` exporter until you can upgrade your stack. So if the transport issue only occurs with `otlp/elastic`, then I suppose switching back should fix the problem.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 23, 2022, 9:27pm UTC](https://discuss.elastic.co/t/elastic-apm-not-accessible-outside-docker-container/311026/10 "2022-08-23T21:27:56Z")

</div>

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.
