Docker compose docker compose使用gitlab ci抛出错误

Docker compose docker compose使用gitlab ci抛出错误,docker-compose,gitlab,Docker Compose,Gitlab,我尝试将Gitlab CI与docker compose一起使用,但总是出现以下错误: $ docker-compose up -d --build Creating network "backoffice_default" with the default driver Building php Creating backoffice_database_1 ... Creating backoffice_database_1 ... done Creating backoffice_php_

我尝试将Gitlab CIdocker compose一起使用,但总是出现以下错误:

$ docker-compose up -d --build
Creating network "backoffice_default" with the default driver
Building php
Creating backoffice_database_1 ... 
Creating backoffice_database_1 ... done
Creating backoffice_php_1 ... 
Creating backoffice_php_1 ... done

$ docker-compose exec php composer -v
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 68, in main
  File "compose/cli/main.py", line 121, in perform_command
  File "compose/cli/main.py", line 464, in exec_command
  File "site-packages/dockerpty/pty.py", line 338, in start
  File "site-packages/dockerpty/io.py", line 32, in set_blocking
ValueError: file descriptor cannot be a negative integer (-1)
Failed to execute script docker-compose
这是我的
docker compose.yml
文件:

version: '2'

services:

  database:
    image: mysql:latest
    environment:
      MYSQL_DATABASE: database
      MYSQL_ROOT_PASSWORD: mysql_strong_password
      MYSQL_USER: database
      MYSQL_PASSWORD: mysql_strong_password

  php:
    build: ./app/docker
    tty: true
    volumes:
      - ./app/docker/php.ini:/usr/local/etc/php/conf.d/custom.ini
      - ./:/var/www/symfony
    links:
      - database
这是我的
.gitlab ci.yml

stages:
- build
- cleanup_build
- test
- deploy
- cleanup

before_script:
- docker info

build:
  stage: build
  script:
  - docker-compose up -d --build
  - docker-compose exec php composer -v
  - docker-compose exec php composer install
  - docker-compose exec php php bin/console doctrine:schema:create --dump-sql --force
  - docker-compose exec php php bin/console doctrine:fixtures:load -n

cleanup_build:
  stage: cleanup_build
  script:
  - docker-compose config
  - docker-compose ps
  - docker-compose logs php
  - docker-compose logs database
  - exit 1
  when: on_failure

phpunit:
  stage: test
  script:
  - docker-compose exec -T php phpunit -c .

deploy:
  stage: deploy
  script:
  - echo "deploy to staging server"

cleanup:
  stage: cleanup
  script:
  - docker-compose down
你们知道怎么解决这个问题吗? 因为我使用
gitlab runner
user直接从shell尝试并执行相同的cmds,所以没有出现任何错误。我试图使用
-T
标志运行
docker compose exec
,但出现另一个错误:
错误:作业失败:退出状态1
,没有附加消息。

问题帮助我找到如何解决该问题的方法

只需在exec之后添加一个
-T
arg就可以帮上大忙

stages:
- build
- cleanup_build
- test
- deploy
- cleanup

before_script:
- docker info

build:
  stage: build
  script:
  - docker-compose up -d --build
  - docker-compose exec php composer -v
  - docker-compose exec php composer install
  - docker-compose exec php php bin/console doctrine:schema:create --dump-sql --force
  - docker-compose exec php php bin/console doctrine:fixtures:load -n

cleanup_build:
  stage: cleanup_build
  script:
  - docker-compose config
  - docker-compose ps
  - docker-compose logs php
  - docker-compose logs database
  - exit 1
  when: on_failure

phpunit:
  stage: test
  script:
  - docker-compose exec -T php phpunit -c .

deploy:
  stage: deploy
  script:
  - echo "deploy to staging server"

cleanup:
  stage: cleanup
  script:
  - docker-compose down