diff --git a/common/network.go b/common/network.go
index c09dda5d74814c5e402045508dc10883188e3164..3f9f52a5cbd4bffa7642db06e5eebfbd4c412eb8 100644
--- a/common/network.go
+++ b/common/network.go
@@ -4,7 +4,6 @@ import (
 	"context"
 	"fmt"
 	"io"
-	"strings"
 
 	"gitlab.com/gitlab-org/gitlab-ci-multi-runner/helpers/url"
 )
diff --git a/helpers/gitlab_ci_yaml_parser/data_bag.go b/helpers/gitlab_ci_yaml_parser/data_bag.go
index c76f76e3b52576cd06e5a033099cc9406c4c37c6..af46fc9f24ca9801c822d76f3ad4658557b7f2d3 100644
--- a/helpers/gitlab_ci_yaml_parser/data_bag.go
+++ b/helpers/gitlab_ci_yaml_parser/data_bag.go
@@ -22,6 +22,20 @@ func (m *DataBag) GetSlice(keys ...string) ([]interface{}, bool) {
 	return nil, false
 }
 
+func (m *DataBag) GetStringSlice(keys ...string) (slice []string, ok bool) {
+	rawSlice, ok := m.GetSlice(keys...)
+	if !ok {
+		return
+	}
+
+	for _, rawElement := range rawSlice {
+		if element, ok := rawElement.(string); ok {
+			slice = append(slice, element)
+		}
+	}
+	return
+}
+
 func (m *DataBag) GetSubOptions(keys ...string) (result DataBag, ok bool) {
 	value, ok := helpers.GetMapKey(*m, keys...)
 	if ok {
diff --git a/helpers/gitlab_ci_yaml_parser/parser.go b/helpers/gitlab_ci_yaml_parser/parser.go
index 7f5aa5dbcf256c16ec684624f0e3d63513f5c955..c3f0f53bc3d7d0823d57d7977692f8cfb4e5fdc7 100644
--- a/helpers/gitlab_ci_yaml_parser/parser.go
+++ b/helpers/gitlab_ci_yaml_parser/parser.go
@@ -223,7 +223,7 @@ func (c *GitLabCiYamlParser) prepareImage(job *common.JobResponse) (err error) {
 
 	if imageDefinition, ok := c.jobConfig.GetSubOptions("image"); ok {
 		job.Image.Name, _ = imageDefinition.GetString("name")
-		job.Image.Entrypoint, _ = imageDefinition.GetString("entrypoint")
+		job.Image.Entrypoint, _ = imageDefinition.GetStringSlice("entrypoint")
 		return
 	}
 
@@ -234,33 +234,24 @@ func (c *GitLabCiYamlParser) prepareImage(job *common.JobResponse) (err error) {
 
 	if imageDefinition, ok := c.config.GetSubOptions("image"); ok {
 		job.Image.Name, _ = imageDefinition.GetString("name")
+		job.Image.Entrypoint, _ = imageDefinition.GetStringSlice("entrypoint")
 		return
 	}
 
 	return
 }
 
-func parseExtendedServiceDefinitionMap(serviceDefinition map[interface{}]interface{}) common.Image {
-	var name, alias, command, entrypoint string
+func parseExtendedServiceDefinitionMap(serviceDefinition map[interface{}]interface{}) (image common.Image) {
+	service := make(DataBag)
 	for key, value := range serviceDefinition {
-		switch key {
-		case "name":
-			name = value.(string)
-		case "alias":
-			alias = value.(string)
-		case "command":
-			command = value.(string)
-		case "entrypoint":
-			entrypoint = value.(string)
-		}
+		service[key.(string)] = value
 	}
 
-	return common.Image{
-		Name:       name,
-		Alias:      alias,
-		Command:    command,
-		Entrypoint: entrypoint,
-	}
+	image.Name, _ = service.GetString("name")
+	image.Alias, _ = service.GetString("alias")
+	image.Command, _ = service.GetStringSlice("command")
+	image.Entrypoint, _ = service.GetStringSlice("entrypoint")
+	return
 }
 
 func (c *GitLabCiYamlParser) prepareServices(job *common.JobResponse) (err error) {
diff --git a/helpers/gitlab_ci_yaml_parser/parser_test.go b/helpers/gitlab_ci_yaml_parser/parser_test.go
index 57bc795765cb5e072bb02dd0cd80173567a4f497..d128df3c63bdf07371ac7774aeb199632ea66b13 100644
--- a/helpers/gitlab_ci_yaml_parser/parser_test.go
+++ b/helpers/gitlab_ci_yaml_parser/parser_test.go
@@ -34,26 +34,27 @@ job4:
   script: job4
   image:
     name: alpine
-    entrypoint: /bin/sh
+    entrypoint: ["/bin/sh"]
   services:
   - name: service:1
-    command: sleep 30
+    command: ["sleep", "30"]
     alias: service-1
   - name: service:2
-    entrypoint: /bin/sh
+    entrypoint: ["/bin/sh"]
     alias: service-2
 `
 
 var testFile2 = `
 image:
   name: global:image
+  entrypoint: [/bin/sh]
 
 services:
 - name: service:1
-  command: sleep 30
+  command: ["sleep", "30"]
   alias: service-1
 - name: service:2
-  entrypoint: /bin/sh
+  entrypoint: [/bin/sh]
   alias: service-2
 
 job1:
@@ -126,33 +127,35 @@ func TestFileParsing(t *testing.T) {
 	// file1 - job4
 	jobResponse = getJobResponse(t, testFile1, "job4", false)
 	assert.Equal(t, "alpine", jobResponse.Image.Name)
-	assert.Equal(t, "/bin/sh", jobResponse.Image.Entrypoint)
+	assert.Equal(t, []string{"/bin/sh"}, jobResponse.Image.Entrypoint)
 	require.Len(t, jobResponse.Services, 2)
 	assert.Equal(t, "service:1", jobResponse.Services[0].Name)
 	assert.Equal(t, "service-1", jobResponse.Services[0].Alias)
-	assert.Equal(t, "sleep 30", jobResponse.Services[0].Command)
+	assert.Equal(t, []string{"sleep", "30"}, jobResponse.Services[0].Command)
 	assert.Empty(t, jobResponse.Services[0].Entrypoint)
 	assert.Equal(t, "service:2", jobResponse.Services[1].Name)
 	assert.Equal(t, "service-2", jobResponse.Services[1].Alias)
 	assert.Empty(t, jobResponse.Services[1].Command)
-	assert.Equal(t, "/bin/sh", jobResponse.Services[1].Entrypoint)
+	assert.Equal(t, []string{"/bin/sh"}, jobResponse.Services[1].Entrypoint)
 
 	// file2 - job1
 	jobResponse = getJobResponse(t, testFile2, "job1", false)
 	assert.Equal(t, "global:image", jobResponse.Image.Name)
+	assert.Equal(t, []string{"/bin/sh"}, jobResponse.Image.Entrypoint)
 	require.Len(t, jobResponse.Services, 2)
 	assert.Equal(t, "service:1", jobResponse.Services[0].Name)
 	assert.Equal(t, "service-1", jobResponse.Services[0].Alias)
-	assert.Equal(t, "sleep 30", jobResponse.Services[0].Command)
+	assert.Equal(t, []string{"sleep", "30"}, jobResponse.Services[0].Command)
 	assert.Empty(t, jobResponse.Services[0].Entrypoint)
 	assert.Equal(t, "service:2", jobResponse.Services[1].Name)
 	assert.Equal(t, "service-2", jobResponse.Services[1].Alias)
 	assert.Empty(t, jobResponse.Services[1].Command)
-	assert.Equal(t, "/bin/sh", jobResponse.Services[1].Entrypoint)
+	assert.Equal(t, []string{"/bin/sh"}, jobResponse.Services[1].Entrypoint)
 
 	// file2 - job2
 	jobResponse = getJobResponse(t, testFile2, "job2", false)
 	assert.Equal(t, "job2:image", jobResponse.Image.Name)
+	assert.Empty(t, jobResponse.Image.Entrypoint)
 	require.Len(t, jobResponse.Services, 2)
 	assert.Equal(t, "service:1", jobResponse.Services[0].Name)
 	assert.Empty(t, jobResponse.Services[0].Alias)