【问题标题】:Docker and travis ci faling on buildDocker 和 travis ci 构建失败
【发布时间】:2019-06-16 01:06:05
【问题描述】:

我正在尝试将我的应用程序作为 travis ci 的一部分进行 dockerize,以便我可以将其发布到 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 撰写:

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

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

【问题讨论】:

  • ps。我正在阅读这份文档:docs.travis-ci.com/user/docker/…
  • 你有 node 但这里也没有 ruby​​。这是一个奇怪的冲突。
  • @DanielA.White 对不起,我不明白你的意思
  • 您的 travis yaml 中有错误的缩进。您应该删除 language 标签之前的空格。
  • 嘿@SiadArdroumli 刚刚注意到,但是stackoverflow 是如何格式化我的代码的,我的文件中的intedation 是正确的。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可能混淆了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
    

    【讨论】:

    • 嘿,这似乎是一个很好的解决方案,谢谢,但在 docker login 时出现错误:0.05s$ if [ "$TRAVIS_BRANCH" == "master" ]; then docker tag mysite:travis-$TRAVIS_BUILD_NUMBER "$DOCKER_USERNAME"/mysite:travis-$TRAVIS_BUILD_NUMBER; echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin docker push "$DOCKER_USERNAME"/mysite:travis-$TRAVIS_BUILD_NUMBER; fi "docker login" requires at most 1 argument. See 'docker login --help'. Usage: docker login [OPTIONS] [SERVER] Log in to a Docker registry Done. Your build exited with 0. 我已在 travis 中添加了我的 ENV 变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多