如何对运行在另一个docker容器中的docker容器进行curl调用?

如何对运行在另一个docker容器中的docker容器进行curl调用?,docker,Docker,我的应用程序是在端口8080上运行的spring boot应用程序。 下面是示例脚本。其中一部分来自gitlab管道,另外两部分来自Prefore和run脚本 Gitlab管道内部: stages: - performance #Run performance test load_performance: stage: performance when: manual before_script: - source ./scripts/gitlab/perf-test/

我的应用程序是在端口8080上运行的spring boot应用程序。 下面是示例脚本。其中一部分来自gitlab管道,另外两部分来自Prefore和run脚本

Gitlab管道内部:

stages:
  - performance

#Run performance test
load_performance:
  stage: performance
  when: manual
  before_script:
    - source ./scripts/gitlab/perf-test/before-script.sh
  script:
    - echo "Running load test"
    - source ./scripts/gitlab/perf-test/run_gatling.sh
  after_script:
    - ls -ltra ./scripts/performance-test/gatling
  artifacts:
    paths:
      - "./scripts/performance-test/gatling/results"
    expire_in: 1 week
    when: always
before-script.sh:此脚本下载gatling和我的应用程序的图像,并以分离模式启动它


LOCALHOST="host.docker.internal"
BASE_URL="http://${LOCALHOST}:8080"


echo "Pulling Gatling image"
docker pull denvazh/gatling


echo "Start my-service2"
starttime=`date +%s`

docker run --ulimit nofile=65536:200000 -itd -p 8080:8080 --name my-service \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $DIR:/opt/app \
gcr.io/com-gcr/my-service-java:jdk-X.X.X_X \
/bin/bash -c "cd /opt/app && ls -ltra && source .envrc \
          && ./gradlew clean bootRun"


run_gatling.sh:这个脚本检查我的服务是否启动。如果启动,则启动选通测试

sleep 5
docker inspect -f '{{ .NetworkSettings.IPAddress }}' my-service

while ! curl http://localhost:8080/actuator/health ## this condition always fail but on local it passes after 1-2 minutes
do
    echo "waiting on my-service to up"
    docker logs --tail=10 my-service
    sleep 30
done

echo "my-service up. It took $(($(date +'%s') - starttime)) seconds."



echo "Starting test:"
starttime=`date +%s`

docker run -it --rm -v $DIR/scripts/performance-test/gatling/conf:/opt/gatling/conf \
-v $DIR/scripts/performance-test/gatling/user-files:/opt/gatling/user-files \
-v $DIR/scripts/performance-test/gatling/results:/opt/gatling/results \
-e JAVA_OPTS="-Dduration=$DURATION -DbaseUrl=$BASE_URL -DmaxRequest=MAX_REQUEST" \
denvazh/gatling -rd performance_tests

docker stop my-service
docker rm my-service


echo "Test complete. It took $(($(date +'%s') - starttime)) seconds."


Docker中的
localhost
通常意味着“这个容器”,所以如果第二个容器真的在做
curlhttp://localhost...
它没有到达应用程序容器。你能在这个设置中提供一些实际的代码吗?嗨@DavidMaze我添加了伪代码。我的代码在本地机器上运行。在本地主机端口8080上,所有请求都被转发到容器端口8080,但这在gitlab runner中不起作用。