GVM does not install products on linux mint - grails

I have a recent version of GVM - in fact, my entire machine is very recent as I wiped off Windows and installed Linux Mint 17 at the end of May or beginning of June. GVM does not install software, doesn't even create the directory (in the example, no 2.4.2 directory - as you can see, the mv fails for this reason). I have had to install the products manually. The "current" points to a non-existent instance if I fail to do so. This has been true of Grails, Groovy and Gradle.
Here is an example:
worldwidewilly#hal9000 ~ $ gvm install grails 2.4.2
Downloading: grails 2.4.2
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0
100 131M 100 131M 0 0 1208k 0 0:01:51 0:01:51 --:--:-- 2092k
Installing: grails 2.4.2
mv: target ‘/home/worldwidewilly/.gvm/grails/2.4.2’ is not a directory
Done installing!
Do you want grails 2.4.2 to be set as default? (Y/n): y
Setting grails 2.4.2 as default.
What need I do to not fail on the install? Are there dependencies in Linux that I need install?
EDIT #1 - adding requested ls
worldwidewilly#hal9000 ~ $ \ls -la ~/.gvm
total 64
drwxr-xr-x 16 worldwidewilly worldwidewilly 4096 Jun 15 12:27 .
drwxr-xr-x 53 worldwidewilly worldwidewilly 4096 Jul 9 22:11 ..
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jul 9 07:58 archives
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 bin
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 crash
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 etc
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 ext
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 gaiden
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 glide
drwxr-xr-x 3 worldwidewilly worldwidewilly 4096 Jun 28 20:54 gradle
drwxr-xr-x 3 worldwidewilly worldwidewilly 4096 Jul 9 08:11 grails
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 griffon
drwxr-xr-x 3 worldwidewilly worldwidewilly 4096 Jun 15 12:27 groovy
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:26 src
drwxr-xr-x 6 worldwidewilly worldwidewilly 4096 Jul 9 08:00 tmp
drwxr-xr-x 2 worldwidewilly worldwidewilly 4096 Jun 15 12:27 var
EDIT #2 - adding second second ls
worldwidewilly#hal9000 ~ $ ls -la ~/.gvm/grails
total 12K
524305 drwxr-xr-x 3 worldwidewilly worldwidewilly 4.0K Jul 9 08:11 .
59776162 drwxr-xr-x 16 worldwidewilly worldwidewilly 4.0K Jun 15 12:27 ..
19138378 drwxr-xr-x 10 worldwidewilly worldwidewilly 4.0K Jun 17 10:09 2.4.1
524458 lrwxrwxrwx 1 worldwidewilly worldwidewilly 38 Jul 9 08:11 current -> /home/worldwidewilly/.gvm/grails/2.4.2
EDIT #3 - showing contents of 2.4.1 directory
worldwidewilly#hal9000 ~ $ ls -la ~/.gvm/grails/2.4.1
total 284K
19138378 drwxr-xr-x 10 worldwidewilly worldwidewilly 4.0K Jun 17 10:09 .
524305 drwxr-xr-x 3 worldwidewilly worldwidewilly 4.0K Jul 9 08:11 ..
19267975 drwxr-xr-x 2 worldwidewilly worldwidewilly 4.0K Jun 17 10:10 bin
19138379 -rw-r--r-- 1 worldwidewilly worldwidewilly 22 Jun 17 09:30 build.properties
19267980 drwxr-xr-x 2 worldwidewilly worldwidewilly 4.0K Jun 17 10:10 conf
19267984 drwxr-xr-x 2 worldwidewilly worldwidewilly 64K Jun 17 10:10 dist
19138380 -rw-r--r-- 1 worldwidewilly worldwidewilly 117 Jun 17 09:20 INSTALL
19138382 drwxr-xr-x 62 worldwidewilly worldwidewilly 4.0K Jun 17 10:09 lib
19138381 -rw-r--r-- 1 worldwidewilly worldwidewilly 171K Jun 17 09:20 LICENSE
19267653 drwxr-xr-x 4 worldwidewilly worldwidewilly 4.0K Jun 17 09:20 media
19267952 drwxr-xr-x 2 worldwidewilly worldwidewilly 4.0K Jun 17 10:10 plugins
19138931 -rw-r--r-- 1 worldwidewilly worldwidewilly 2.5K Jun 17 09:20 README
19267876 drwxr-xr-x 2 worldwidewilly worldwidewilly 4.0K Jun 17 10:10 scripts
19267676 drwxr-xr-x 5 worldwidewilly worldwidewilly 4.0K Jun 17 10:09 src
EDIT #4 - adding zip info
worldwidewilly#hal9000 ~ $ which zip
/usr/bin/zip
worldwidewilly#hal9000 ~ $ zip -h
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete OS files)
-r recurse into directories -j junk (don't record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-# read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-e encrypt -n don't compress these suffixes
-h2 show more help

The problem was that I had improperly aliased my mv command, which caused mv to break. See http://forums.linuxmint.com/viewtopic.php?f=90&t=174548 for a deeper explanation.

Related

How to mount volumes inside a container that is started from a bash script in Google Cloud Build?

I have a cloudbuild.yaml file that looks like this:
steps:
- name: 'gcr.io/cloud-builders/gsutil'
args: [ "-m", "rsync", "-r", "gs://${_BUCKET}/maven-repository", "/cache/.m2" ]
volumes:
- path: '/cache/.m2'
name: 'm2_cache'
- name: docker/compose:debian-1.29.2
entrypoint: bash
args:
- -c
- |
./test.sh
volumes:
- path: '/cache/.m2'
name: 'm2_cache'
timeout: 2700s
substitutions:
_BUCKET: 'my-bucket'
In the first step we download our maven settings.xml file from GCS. This file is crucial for subsequent build steps since it contain the username/password to our Artifact Registry Maven repository (I've simplified this example as we don't actually store the credential in the settings.xml as plain text). Without these credentials, our Maven build won't run. Normally the script that we call in the second step starts several docker containers and then run our maven tests. But I've replaced it with test.sh to easier show what the problem is. The test.sh file is shown below:
#!/bin/bash
echo "### [Host] Contents in /cache/.m2"
ls -la /cache/.m2
mkdir ~/test
echo "Johan" > ~/test/ikk.txt
echo "### [Host] Contents in ~/test"
ls -la ~/test
docker run --rm -v /cache/.m2:/cache/.m2 -v ~/test:/root/test -w /usr/src/somewhere ubuntu bash -c 'echo "### [Docker] Contents in /cache/.m2" && ls -la /cache/.m2 && echo "### [Docker] Contents in /root/test" && ls -la /root/test'
I.e. we try to mount two volumes to the ubuntu container that we start in the test.sh file. I list the contents in two directors both outside (### [Host]) and inside (### [Docker]) the ubuntu container. Here's the relevant output of running this in cloud build:
### [Host] Contents in /cache/.m2
total 16
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 3 root root 4096 Sep 15 08:55 ..
-rw-r--r-- 1 root root 8063 Sep 13 11:03 settings.xml
### [Host] Contents in ~/test
total 12
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 6 root root 4096 Sep 15 08:55 ..
-rw-r--r-- 1 root root 6 Sep 15 08:55 ikk.txt
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
Digest: sha256:20fa2d7bb4de7723f542be5923b06c4d704370f0390e4ae9e1c833c8785644c1
Status: Downloaded newer image for ubuntu:latest
### [Docker] Contents in /cache/.m2
total 8
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwxr-xr-x 3 root root 4096 Sep 15 08:55 ..
### [Docker] Contents in /root/test
total 8
drwxr-xr-x 2 root root 4096 Sep 15 08:55 .
drwx------ 1 root root 4096 Sep 15 08:55 ..
As you can see, the volume mounts doesn't seem to work when I run the ubuntu container from the test.sh file in cloud build (since the contents of /root/test and /cache/.m2 are empty).
Running the test.sh locally on my machine yields the expected outcome:
### [Host] Contents in /cache/.m2
total 40
drwxr-xr-x 7 johan staff 224 Mar 15 2022 .
drwxr-x---+ 87 johan staff 2784 Sep 15 10:58 ..
-rw-r--r-- 1 johan staff 2344 Sep 14 11:37 copy_reference_file.log
drwxr-xr-x 221 johan staff 7072 Sep 14 10:52 repository
-rw-r--r-- 1 johan staff 327 Nov 24 2021 settings-docker.xml
-rw-r--r--# 1 johan staff 9842 Mar 15 2022 settings.xml
drwxr-xr-x 3 johan staff 96 Nov 19 2021 wrapper
### [Host] Contents in ~/test
total 8
drwxr-xr-x# 3 johan staff 96 Sep 15 10:53 .
drwxr-xr-x# 135 johan staff 4320 Sep 15 10:49 ..
-rw-r--r-- 1 johan staff 6 Sep 15 10:58 ikk.txt
### [Docker] Contents in /cache/.m2
total 24
drwxr-xr-x 7 root root 224 Mar 15 2022 .
drwxr-xr-x 3 root root 4096 Sep 15 08:58 ..
-rw-r--r-- 1 root root 2344 Sep 14 09:37 copy_reference_file.log
drwxr-xr-x 221 root root 7072 Sep 14 08:52 repository
-rw-r--r-- 1 root root 327 Nov 24 2021 settings-docker.xml
-rw-r--r-- 1 root root 9842 Mar 15 2022 settings.xml
drwxr-xr-x 3 root root 96 Nov 19 2021 wrapper
### [Docker] Contents in /root/test
total 8
drwxr-xr-x 3 root root 96 Sep 15 08:53 .
drwx------ 1 root root 4096 Sep 15 08:58 ..
-rw-r--r-- 1 root root 6 Sep 15 08:58 ikk.txt
Here you can see that the volumes are mounted correctly and I can access the files inside the ubuntu container.
How can I mount volumes inside a container in cloud build?

kitura docker error checking context: 'can't stat '/home/conor/workspace/UserInstruction/.build-ubuntu/checkouts''

I am unable to build the docker image which will be uploaded to DockerHub/AWS EC2, the folder is owned by root. The docker install is as directed on the official docker docs, the hello-world test runs without error. I am following the post here https://www.raywenderlich.com/1244870-deploying-kitura-with-docker-kubernetes-getting-started
The Swift/Kitura project builds and runs without error.
conor#lenovo:~/workspace/UserInstruction$ ls -la
total 56
drwxr-xr-x 7 conor conor 4096 Dec 11 16:15 .
drwxr-xr-x 7 conor conor 4096 Dec 11 09:52 ..
drwxr-xr-x 5 conor conor 4096 Dec 11 16:13 .build
drwxr-xr-x 5 root root 4096 Dec 11 16:17 .build-ubuntu
-rw-r--r-- 1 conor conor 950 Dec 11 16:16 Dockerfile
-rwxr-xr-x 1 conor conor 876 Dec 10 08:49 Dockerfile-tools
drwxr-xr-x 8 conor conor 4096 Dec 10 11:46 .git
-rw-r--r-- 1 conor conor 53 Dec 10 08:25 .gitignore
-rw-r--r-- 1 conor conor 4144 Dec 11 16:16 Package.resolved
-rw-r--r-- 1 conor conor 716 Dec 11 16:16 Package.swift
-rw-r--r-- 1 conor conor 50 Dec 10 08:25 README.md
drwxr-xr-x 3 conor conor 4096 Dec 10 08:25 Sources
drwxr-xr-x 3 conor conor 4096 Dec 10 08:25 Tests
root#lenovo:~# ls -la /home/conor/workspace/UserInstruction/.build-ubuntu/
total 284
drwxr-xr-x 5 root root 4096 Dec 11 16:17 .
drwxr-xr-x 7 conor conor 4096 Dec 11 16:15 ..
-rw-r--r-- 1 root root 142336 Dec 11 16:17 build.db
drwxr-x--- 17 root root 4096 Dec 11 16:16 checkouts
-rw-r--r-- 1 root root 5283 Dec 11 16:16 dependencies-state.json
-rw-r--r-- 1 root root 2 Dec 11 16:16 regenerate-token
lrwxrwxrwx 1 root root 28 Dec 11 16:17 release -> x86_64-unknown-linux/release
-rw-r--r-- 1 root root 114525 Dec 11 16:16 release.yaml
drwxr-x--- 17 root root 4096 Dec 11 16:16 repositories
drwxr-x--- 3 root root 4096 Dec 11 16:16 x86_64-unknown-linux
swift --version
Swift version 5.1 (swift-5.1.2-RELEASE)
Target: x86_64-unknown-linux-gnu
List of Commands Run
swift build
docker build -t user-instructions-build -f Dockerfile-tools .
docker run -v $PWD:/swift-project -w /swift-project user-instructions-build /swift-utils/tools-utils.sh build release
conor#lenovo:~/workspace/UserInstruction$ docker build -t user-instructions-run .
error checking context: 'can't stat '/home/conor/workspace/UserInstruction/.build-ubuntu/checkouts''.
ls /home/conor/workspace/UserInstruction/.build-ubuntu/
build.db checkouts dependencies-state.json regenerate-token release release.yaml repositories x86_64-unknown-linux
Dockerfile
FROM ibmcom/swift-ubuntu-runtime:4.1.0
MAINTAINER IBM Swift Engineering at IBM Cloud
LABEL Description="Template Dockerfile that extends the ibmcom/swift-ubuntu-runtime image."
# We can replace this port with what the user wants
EXPOSE 8080
# Default user if not provided
ARG bx_dev_user=root
ARG bx_dev_userid=1000
# Install system level packages
# RUN apt-get update && apt-get dist-upgrade -y
# Add utils files
ADD https://raw.githubusercontent.com/IBM-Swift/swift-ubuntu-docker/master/utils/run-utils.sh /swift-utils/run-utils.sh
ADD https://raw.githubusercontent.com/IBM-Swift/swift-ubuntu-docker/master/utils/common-utils.sh /swift-utils/common-utils.sh
RUN chmod -R 555 /swift-utils
# Create user if not root
RUN if [ $bx_dev_user != "root" ]; then useradd -ms /bin/bash -u $bx_dev_userid $bx_dev_user; fi
# Bundle application source & binaries
COPY . /swift-project
# Command to start Swift application
CMD [ "sh", "-c", "swift run" ]
Package.swift
// swift-tools-version:4.1.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
// 1
name: "UserInstruction",
dependencies: [
// 2
.package(url: "https://github.com/IBM-Swift/Kitura.git",
.upToNextMajor(from: "2.0.0")),
// 3
.package(url: "https://github.com/IBM-Swift/HeliumLogger.git",
.upToNextMajor(from: "1.0.0")),
// 4
.package(url: "https://github.com/IBM-Swift/Kitura-CouchDB.git",
.upToNextMajor(from: "3.0.0"))
],
//5
targets: [
.target(name: "UserInstruction",
dependencies: ["Kitura" , "HeliumLogger", "CouchDB"],
path: "Sources")
]
)
full output

docker cp - "Error response from daemon: not a directory"

I am trying to copy file from docker to host using the below command,
docker cp <container_name>:<file FQN> ./
But getting the below error,
Error response from daemon: not a directory
As verified, the file name and container name are valid.
Note: Using Docker in Mac
Thanks for all the answers. After a bit of struggle found out that the error message was not actually directly related to the docker cp command.
The scenario was, I ran the docker with the link to a local file. When the docker was running I deleted it. Then the file got created as a folder somehow (Probably, when I restarted the docker).
And whenever I am executing some command, the docker was giving me that error. Then once I created the file the error disappeared.
It seems your command is correct. You please try like the below from your local machine not from inside the container. sometimes unfortunately if we run this command with in the container we will get this kind of errors.
docker cp [container_name]:[docker dir abs path] [host dir path]
Hope it will help you.
Here is a full example on how to copy a file:
$ docker run -it ubuntu /bin/bash
root#9fc8a1af7f23:/#
root#9fc8a1af7f23:/# ll
total 72
drwxr-xr-x 34 root root 4096 Jul 13 21:51 ./
drwxr-xr-x 34 root root 4096 Jul 13 21:51 ../
-rwxr-xr-x 1 root root 0 Jul 13 21:51 .dockerenv*
drwxr-xr-x 2 root root 4096 Feb 14 23:29 bin/
drwxr-xr-x 2 root root 4096 Apr 12 2016 boot/
drwxr-xr-x 5 root root 360 Jul 13 21:51 dev/
drwxr-xr-x 45 root root 4096 Jul 13 21:51 etc/
drwxr-xr-x 2 root root 4096 Apr 12 2016 home/
drwxr-xr-x 8 root root 4096 Sep 13 2015 lib/
drwxr-xr-x 2 root root 4096 Feb 14 23:29 lib64/
drwxr-xr-x 2 root root 4096 Feb 14 23:28 media/
drwxr-xr-x 2 root root 4096 Feb 14 23:28 mnt/
drwxr-xr-x 2 root root 4096 Feb 14 23:28 opt/
dr-xr-xr-x 288 root root 0 Jul 13 21:51 proc/
drwx------ 2 root root 4096 Feb 14 23:29 root/
drwxr-xr-x 6 root root 4096 Feb 27 19:41 run/
drwxr-xr-x 2 root root 4096 Feb 27 19:41 sbin/
drwxr-xr-x 2 root root 4096 Feb 14 23:28 srv/
dr-xr-xr-x 13 root root 0 Jul 13 21:51 sys/
drwxrwxrwt 2 root root 4096 Feb 14 23:29 tmp/
drwxr-xr-x 11 root root 4096 Feb 27 19:41 usr/
drwxr-xr-x 13 root root 4096 Feb 27 19:41 var/
root#9fc8a1af7f23:/# cd tmp/
root#9fc8a1af7f23:/tmp# ls
root#9fc8a1af7f23:/tmp# echo "hello docker" > docker_test.txt
root#9fc8a1af7f23:/tmp# cat docker_test.txt
hello docker
root#9fc8a1af7f23:/tmp#
Then, in another terminal
dali#dali-X550JK:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fc8a1af7f23 ubuntu "/bin/bash" 2 minutes ago Up 2 minutes fervent_hodgkin
dali#dali-X550JK:~$ docker cp fervent_hodgkin:/tmp/docker_test.txt /tmp/
dali#dali-X550JK:~$ cat /tmp/docker_test.txt
hello docker
dali#dali-X550JK:~$
Please follow these instruction, make sure your don't have typo in the file paths, otherwise share a reproducible error.
This error also appears when trying to copy a file that is actually a volume in the container, but the file has been deleted on the host.
This is simply an error in the path you want to copy.
You may not believe it, but that it is.

.dockerignore mentioned files are not ignored

I'm having in Dockerfile:
ENV DATARATOR_HOME /usr/local/share/datarator
RUN mkdir -p $DATARATOR_HOME
COPY . $DATARATOR_HOME
and .dockerignore file:
/Gemfile.lock
/coverage
/spec
*.bundle
*.so
*.o
*.a
mkmf.log
*.swp
/.*
/tmp
/log
However, once showing files in the built container, I can see also those that are supposed to be ignored:
/usr/local/share/datarator # ls -lha
total 128
drwxr-xr-x 10 root root 4.0K Mar 29 21:01 .
drwxr-xr-x 4 root root 4.0K Mar 29 21:00 ..
drwxr-xr-x 2 root root 4.0K Mar 29 21:01 .bundle
-rw-rw-r-- 1 root root 24 Mar 29 20:37 .coveralls.yml
-rw-rw-r-- 1 root root 81 Mar 29 20:37 .dockerignore
drwxrwxr-x 8 root root 4.0K Mar 29 20:37 .git
-rw-rw-r-- 1 root root 85 Mar 29 20:37 .gitignore
-rw-rw-r-- 1 root root 1.2K Mar 29 20:37 .travis.yml
-rw-rw-r-- 1 root root 509 Mar 29 20:37 .vimrc
-rw-rw-r-- 1 root root 959 Mar 29 20:37 Dockerfile
-rw-rw-r-- 1 root root 94 Mar 29 20:37 Gemfile
-rw-r--r-- 1 root root 2.7K Mar 29 21:01 Gemfile.lock
-rw-rw-r-- 1 root root 343 Mar 29 20:37 Guardfile
-rw-rw-r-- 1 root root 1.0K Mar 29 20:37 LICENSE.txt
-rw-rw-r-- 1 root root 71 Mar 29 20:37 Procfile
-rw-rw-r-- 1 root root 14.8K Mar 29 20:37 README.md
-rw-rw-r-- 1 root root 198 Mar 29 20:37 Rakefile
drwxrwxr-x 2 root root 4.0K Mar 29 20:37 bin
drwxrwxr-x 2 root root 4.0K Mar 29 20:37 config
-rw-rw-r-- 1 root root 97 Mar 29 20:37 config.ru
-rw-r--r-- 1 root root 16.0K Mar 29 21:01 datarator-0.0.1.gem
-rw-rw-r-- 1 root root 1.7K Mar 29 20:37 datarator.gemspec
drwxrwxr-x 4 root root 4.0K Mar 29 20:37 lib
drwxrwxr-x 2 root root 4.0K Mar 29 20:37 log
drwxrwxr-x 3 root root 4.0K Mar 29 20:37 spec
drwxrwxr-x 2 root root 4.0K Mar 29 20:37 tmp
How can I achieve having all those mentioned in the .dockerignore file ignored?
The .dockerignore rules follow the filepath/#Match.
Try (for testing) Gemfile.lock instead of /Gemfile.lock.
And check that the eol (end of line) characters are unix-style, not Windows style in your .dockerignore file.
Apparently, (docker 1.10, March 2016) using rule starting with / like /xxx ( or /.*) is not well supported.
Here's the complete syntax for the .dockerignore:
pattern:
{ term }
term:
'*' matches any sequence of non-Separator characters
'?' matches any single non-Separator character
'[' [ '^' ] { character-range } ']'
character class (must be non-empty)
c matches character c (c != '*', '?', '\\', '[')
'\\' c matches character c
character-range:
c matches character c (c != '\\', '-', ']')
'\\' c matches character c
lo '-' hi matches character c for lo <= c <= hi
additions:
'**' matches any number of directories (including zero)
'!' lines starting with ! (exclamation mark) can be used to make exceptions to exclusions
'#' lines starting with this character are ignored: use it for comments
Therefore, some of your matches would be changed according to the above syntax:
/Gemfile.lock --> */Gemfile.lock or **/Gemfile.lock or *.lock
/spec --> */spec or **/spec
/tmp --> in the same way
/log --> in the same way
Here are two articles to explain more:
Reference
Reference

Issue with docker-py in executing /bin/bash

I have a docker image built from ubuntu base image with few softwares installed.
i have a startup script, as below
#!/bin/bash
/usr/local/sbin/process1 -d
/usr/local/sbin/process2 -d
/bin/bash
Now I use docker-py python library to start multiple of these containers from a python file.
c = docker.Client(base_url='unix://var/run/docker.sock',
version='1.12',
timeout=10)
container = c.create_container("p12", command="/startup.sh", hostname=None, user=None,
detach=False, stdin_open=False, tty=False, mem_limit=0,
ports=None, environment=None, dns=None, volumes=None,
volumes_from=None, network_disabled=False, name=None,
entrypoint=None, cpu_shares=None, working_dir=None,
memswap_limit=0)
c.start(container, binds=None, port_bindings=None, lxc_conf=None,
publish_all_ports=False, links=None, privileged=False,
dns=None, dns_search=None, volumes_from=None, network_mode=None,
restart_policy=None, cap_add=None, cap_drop=None)
This worked fine and I can start multiple (say 3) when I tested this on a Ubuntu Desktop, Ubuntu 14.04.1 LTS and with docker-py version of 1.10. It will start the dockers and I can do a docker attach later and work on the terminal.
Now i moved my testing environment to a Ubuntu Server edition with Ubuntu 14.04.1 LTS and with docker-py version of 1.12.
The issue i see is that, when I use the same script and try to start 3 dockers, after starting process1 and process 2 as background processes, all the dockers simply exit. It appears as if /bin/bash doesnt execute at all.
If i execute the same docker image as "docker run -t -i p14 /startup.sh --> then everything is fine again. The docker is started appropriately and i get the terminal access.
The only issue is when i execute this python library.
anybody has any similar issues...any idea on how to debug this problem...or any pointers for the fix ?
Thanks,
Kiran
The difference is you're in tty (-t) mode with an open stdin (-i) when you run your docker image with docker run -t -i p14 /startup.sh, whereas you set both stdin_open=False and tty=False in your docker-py configuration.
Because your docker container has no tty and can't take any input from stdin, your call to /bin/bash has nothing to do so exits with code 0.
Try it yourself:
An open stdin with a tty
$ docker run -t -i ubuntu:14.04 /bin/bash
root#1e7eda2bba03:/# ls -la
total 7184
drwxr-xr-x 21 root root 4096 Sep 19 21:30 .
drwxr-xr-x 21 root root 4096 Sep 19 21:30 ..
-rwxr-xr-x 1 root root 0 Sep 19 21:30 .dockerenv
-rwx------ 1 root root 7279686 Jul 21 10:50 .dockerinit
drwxr-xr-x 2 root root 4096 Sep 3 03:33 bin
drwxr-xr-x 2 root root 4096 Apr 10 22:12 boot
drwxr-xr-x 4 root root 360 Sep 19 21:30 dev
drwxr-xr-x 61 root root 4096 Sep 19 21:30 etc
drwxr-xr-x 2 root root 4096 Apr 10 22:12 home
drwxr-xr-x 12 root root 4096 Sep 3 03:33 lib
drwxr-xr-x 2 root root 4096 Sep 3 03:33 lib64
drwxr-xr-x 2 root root 4096 Sep 3 03:33 media
drwxr-xr-x 2 root root 4096 Apr 10 22:12 mnt
drwxr-xr-x 2 root root 4096 Sep 3 03:33 opt
dr-xr-xr-x 240 root root 0 Sep 19 21:30 proc
drwx------ 2 root root 4096 Sep 3 03:33 root
drwxr-xr-x 7 root root 4096 Sep 3 03:33 run
drwxr-xr-x 2 root root 4096 Sep 4 18:41 sbin
drwxr-xr-x 2 root root 4096 Sep 3 03:33 srv
dr-xr-xr-x 13 root root 0 Sep 19 18:44 sys
drwxrwxrwt 2 root root 4096 Sep 4 18:41 tmp
drwxr-xr-x 10 root root 4096 Sep 3 03:33 usr
drwxr-xr-x 11 root root 4096 Sep 3 03:33 var
root#1e7eda2bba03:/#
An open stdin with no tty (i.e., no prompt, but you can still send commands via stdin)
$ docker run -i ubuntu:14.04 /bin/bash
ls -la
total 7184
drwxr-xr-x 21 root root 4096 Sep 19 21:32 .
drwxr-xr-x 21 root root 4096 Sep 19 21:32 ..
-rwxr-xr-x 1 root root 0 Sep 19 21:32 .dockerenv
-rwx------ 1 root root 7279686 Jul 21 10:50 .dockerinit
drwxr-xr-x 2 root root 4096 Sep 3 03:33 bin
drwxr-xr-x 2 root root 4096 Apr 10 22:12 boot
drwxr-xr-x 4 root root 340 Sep 19 21:32 dev
drwxr-xr-x 61 root root 4096 Sep 19 21:32 etc
drwxr-xr-x 2 root root 4096 Apr 10 22:12 home
drwxr-xr-x 12 root root 4096 Sep 3 03:33 lib
drwxr-xr-x 2 root root 4096 Sep 3 03:33 lib64
drwxr-xr-x 2 root root 4096 Sep 3 03:33 media
drwxr-xr-x 2 root root 4096 Apr 10 22:12 mnt
drwxr-xr-x 2 root root 4096 Sep 3 03:33 opt
dr-xr-xr-x 243 root root 0 Sep 19 21:32 proc
drwx------ 2 root root 4096 Sep 3 03:33 root
drwxr-xr-x 7 root root 4096 Sep 3 03:33 run
drwxr-xr-x 2 root root 4096 Sep 4 18:41 sbin
drwxr-xr-x 2 root root 4096 Sep 3 03:33 srv
dr-xr-xr-x 13 root root 0 Sep 19 18:44 sys
drwxrwxrwt 2 root root 4096 Sep 4 18:41 tmp
drwxr-xr-x 10 root root 4096 Sep 3 03:33 usr
drwxr-xr-x 11 root root 4096 Sep 3 03:33 var
A closed stdin with a tty (you can see the prompt but you can't enter any commands)
$ docker run -t ubuntu:14.04 /bin/bash
root#95904c21e5a5:/# ls -la
hello
this does nothing :(
A closed stdin with no tty - /bin/bash has nothing to do
$ docker run ubuntu:14.04 /bin/bash
$

Resources