Приложение Curl, запущенное в контейнере из другого контейнера - PullRequest
0 голосов
/ 21 октября 2019

Я создал сеть докеров с:

docker network create --driver bridge sample-network

Затем я запускаю два контейнера в этой сети:

  docker run -it --network sample-network -p 8080:8080 --name frontend-container frontend-image
  docker run -it --network sample-network -p 8082:8080 --name backend-container backend-image

и результат:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e5328faa21db        frontend-image      "docker-entrypoint.s…"   33 minutes ago      Up 33 minutes       0.0.0.0:8080->8080/tcp   frontend-container
e13d798edbec        backend-image       "java -jar backend-0…"   About an hour ago   Up About an hour    0.0.0.0:8082->8080/tcp   backend-container

Где backend-container запускает веб-приложение с пружинной загрузкой

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.7.RELEASE)

2019-10-21 18:29:40.487  INFO 1 --- [           main] hello.Application                        : Starting Application v0.1.0-SNAPSHOT on e13d798edbec with PID 1 (/backend-0.1.0-SNAPSHOT.jar started by root in /)
2019-10-21 18:29:40.489  INFO 1 --- [           main] hello.Application                        : No active profile set, falling back to default profiles: default
2019-10-21 18:29:41.289  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-10-21 18:29:41.321  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-10-21 18:29:41.321  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.22]
2019-10-21 18:29:41.399  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-10-21 18:29:41.399  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 873 ms
2019-10-21 18:29:41.609  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-10-21 18:29:41.758  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-10-21 18:29:41.761  INFO 1 --- [           main] hello.Application                        : Started Application in 1.604 seconds (JVM running for 1.889)

Далее я хотел бы свернуть backend-container из frontend-container:

$ docker exec -it frontend-container /bin/bash
bash-4.4# curl backend-container:8082
curl: (7) Failed to connect to backend-container port 8082: Connection refused

Но почему яполучить соединение отказано? Они оба находятся в одной сети.

1 Ответ

3 голосов
/ 21 октября 2019

Оба ваших контейнера запускают приложения через порт 8080. Поэтому для подключения к бэкэнд-приложению по сети вы должны использовать backend-container:8080 в качестве хоста.

Кажется, вы опубликовали порт 8082 из backend-container для своего хоста - но это не значит, что вы можете подключиться к приложению на этом порту из другого контейнера - это будет работать, если вы захотите получить доступ backend-container от хоста, используя localhost:8082.

О том, как работает опция -p, см. container networking:

ByПо умолчанию, когда вы создаете контейнер, он не публикует свои порты во внешнем мире. Чтобы сделать порт доступным для служб вне Docker или для контейнеров Docker, которые не подключены к сети контейнера, используйте флаг --publish или -p. Это создает правило брандмауэра, которое сопоставляет порт контейнера с портом на хосте Docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...