diff --git a/executors/docker/executor_docker.go b/executors/docker/executor_docker.go
index ba81c3e30871cda218d0429aed6e6fec4ac72995..f77709d3d0d88cee3e65e334104df54b2d0c4bae 100644
--- a/executors/docker/executor_docker.go
+++ b/executors/docker/executor_docker.go
@@ -622,13 +622,12 @@ func (s *executor) getServicesDefinitions() (common.Services, error) {
 
 	for _, service := range s.Build.Services {
 		serviceName := s.Build.GetAllVariables().ExpandValue(service.Name)
-		err := s.verifyAllowedImage(service.Name, "services", s.Config.Docker.AllowedServices, s.Config.Docker.Services)
+		err := s.verifyAllowedImage(serviceName, "services", s.Config.Docker.AllowedServices, s.Config.Docker.Services)
 		if err != nil {
 			return nil, err
 		}
 
 		service.Name = serviceName
-
 		serviceDefinitions = append(serviceDefinitions, service)
 	}
 
diff --git a/executors/docker/executor_docker_command_test.go b/executors/docker/executor_docker_command_test.go
index 024a506ac6312d3aa27882dec00194d4436fef70..5962a88276ae7c07f728e7c1a4666869754a17b7 100644
--- a/executors/docker/executor_docker_command_test.go
+++ b/executors/docker/executor_docker_command_test.go
@@ -505,6 +505,72 @@ func TestCacheInContainer(t *testing.T) {
 	assert.NotContains(t, output, skipCacheUpload, "Cache upload should be performed with policy: push")
 }
 
+func TestDockerImageNameFromVariable(t *testing.T) {
+	if helpers.SkipIntegrationTests(t, "docker", "info") {
+		return
+	}
+
+	successfulBuild, err := common.GetRemoteSuccessfulBuild()
+	successfulBuild.Variables = append(successfulBuild.Variables, common.JobVariable{
+		Key:   "CI_REGISTRY_IMAGE",
+		Value: "alpine",
+	})
+	successfulBuild.Image = common.Image{
+		Name: "$CI_REGISTRY_IMAGE",
+	}
+	assert.NoError(t, err)
+	build := &common.Build{
+		JobResponse: successfulBuild,
+		Runner: &common.RunnerConfig{
+			RunnerSettings: common.RunnerSettings{
+				Executor: "docker",
+				Docker: &common.DockerConfig{
+					Image:           "alpine",
+					AllowedServices: []string{"alpine"},
+				},
+			},
+		},
+	}
+
+	re := regexp.MustCompile("(?m)^ERROR: The [^ ]+ is not present on list of allowed images")
+
+	output := runTestJobWithOutput(t, build)
+	assert.NotRegexp(t, re, output, "Image's name should be expanded from variable")
+}
+
+func TestDockerServiceNameFromVariable(t *testing.T) {
+	if helpers.SkipIntegrationTests(t, "docker", "info") {
+		return
+	}
+
+	successfulBuild, err := common.GetRemoteSuccessfulBuild()
+	successfulBuild.Variables = append(successfulBuild.Variables, common.JobVariable{
+		Key:   "CI_REGISTRY_IMAGE",
+		Value: "alpine",
+	})
+	successfulBuild.Services = append(successfulBuild.Services, common.Image{
+		Name: "$CI_REGISTRY_IMAGE",
+	})
+	assert.NoError(t, err)
+	build := &common.Build{
+		JobResponse: successfulBuild,
+		Runner: &common.RunnerConfig{
+			RunnerSettings: common.RunnerSettings{
+				Executor: "docker",
+				Docker: &common.DockerConfig{
+					Image:           "alpine",
+					AllowedServices: []string{"alpine"},
+				},
+			},
+		},
+	}
+
+	re := regexp.MustCompile("(?m)^ERROR: The [^ ]+ is not present on list of allowed services")
+
+	output := runTestJobWithOutput(t, build)
+	assert.NotRegexp(t, re, output, "Service's name should be expanded from variable")
+}
+
 func runDockerInDocker(version string) (id string, err error) {
 	cmd := exec.Command("docker", "run", "--detach", "--privileged", "-p", "2375", "docker:"+version+"-dind")
 	cmd.Stderr = os.Stderr