我正在尝试将我的应用作为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
我尝试进入容器以查看它们的目录是否匹配,但是容器始终在启动后立即退出
答案 0 :(得分:0)
要在现有的正在运行的容器上执行命令,您必须调用“ docker exec”而不是“ docker run”
答案 1 :(得分:0)
您可以混合使用node_js
和ruby
。将您的.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