Docker和travis ci在构建时失败

时间:2019-06-14 18:43:58

标签: docker docker-compose continuous-integration travis-ci

我正在尝试将我的应用作为travis ci的一部分进行docker化,以便随后将其发布到docker hub:

我已经设置了Dockerfile,docker-compose和travis.yml 当github中的管道完成时,我收到以下错误消息:

0.60s$ docker run mysite /bin/sh -c "cd /root/mysite; bundle exec rake test"
/bin/sh: 1: cd: can't cd to /root/mysite
/bin/sh: 1: bundle: not found
The command "docker run mysite /bin/sh -c "cd /root/mysite; bundle exec rake test"" failed and exited with 127 during .

我的Dockerfile:

#Server
FROM node:latest

#create app dir in the container
RUN mkdir -p /usr/src/app

#sets working direcotry for the app
#this allows to run all the comand
#like RUN CMD etc.
WORKDIR /usr/src/app

COPY package.json /usr/src/app/
RUN npm config set strict-ssl false
RUN npm install

# Bundle app source
COPY . .

EXPOSE 3006

CMD [ "npm", "run", "start:unsafe" ]

Docker-compose:

version: '3'
services:
  web:
    build: .

travis.yml:

sudo: required

    language: node_js

node_js:
  - "stable"

services:
  - docker

before_install:
  - docker build -t mysite .
  - docker run -d -p 127.0.0.1:80:4567 mysite /bin/sh -c "cd /root/mysite; bundle exec foreman start;"
  - docker ps -a
  - docker run mysite /bin/sh -c "cd /root/mysite; bundle exec rake test"
cache:
  directories:
    - node_modules    
script:
  - bundle exec rake test
  - npm test
  - npm run build

我尝试从travis yml本地运行命令并得到相同的错误:

/bin/sh: 1: cd: can't cd to /usr/src/app/mysite
/bin/sh: 1: bundle: not found

我尝试进入容器以查看它们的目录是否匹配,但是容器始终在启动后立即退出

2 个答案:

答案 0 :(得分:0)

要在现有的正在运行的容器上执行命令,您必须调用“ docker exec”而不是“ docker run”

答案 1 :(得分:0)

您可以混合使用node_jsruby。将您的.travis.yml改写为:

sudo: required
language: node_js
node_js: 
  - "stable"
cache:
  directories:
    - "node_modules"
services:
  - docker
before_install:
  - docker build -t mysite:travis-$TRAVIS_BUILD_NUMBER .
script:
  - npm test
  - npm run build
  - docker images "$DOCKER_USERNAME"/mysite
after_success:
  - if [ "$TRAVIS_BRANCH" == "master" ]; then
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD";
    docker tag mysite:travis-$TRAVIS_BUILD_NUMBER "$DOCKER_USERNAME"/mysite:travis-$TRAVIS_BUILD_NUMBER;
    docker push "$DOCKER_USERNAME"/mysite:travis-$TRAVIS_BUILD_NUMBER;
fi