2016-08-28 1 views
0

Je construis binocles de source et en utilisantbin monté dans un conteneur alpin ne parvient pas à courir avec/binocles ne se trouve pas

COPY gogs /home/git/go/src/github.com/gogits/gogs

pour ajouter le dossier contenant le bac de binocles construit et il est des fichiers sur mon conteneur.

Si je cd à /home/git/go/src/github.com/gogits/gogs Je peux voir le fichier, je peux le chmod + x il, ls -l pour voir les permissions et la propriété etc etc Cependant, je ne peux pas sembler l'exécuter. Chaque façon que j'essaie je reçois:

/home/git/go/src/github.com/gogits/gogs # cat /var/log/gogs/stderr.log 
/bin/ash: /home/git/go/src/github.com/gogits/gogs/gogs: not found 
/bin/ash: /home/git/go/src/github.com/gogits/gogs/gogs: not found 
/bin/ash: /home/git/go/src/github.com/gogits/gogs/gogs: not found 

Exécution ls -l . dans le répertoire binocles:

/home/git/go/src/github.com/gogits/gogs # ls -l . 
total 33148 
-rw-r--r-- 1 git  nogroup  613 Aug 27 09:22 Dockerfile 
-rw-r--r-- 1 git  nogroup  913 Aug 27 09:22 Dockerfile.rpi 
-rw-r--r-- 1 git  nogroup  1054 Aug 27 09:22 LICENSE 
-rw-r--r-- 1 git  nogroup  1792 Aug 27 09:22 Makefile 
-rw-r--r-- 1 git  nogroup  7852 Aug 27 09:22 README.md 
-rw-r--r-- 1 git  nogroup  5331 Aug 27 09:22 README_ZH.md 
drwxr-xr-x 2 git  nogroup  4096 Aug 28 08:33 cmd 
drwxr-xr-x 10 git  nogroup  4096 Aug 28 08:33 conf 
drwxr-xr-x 5 git  nogroup  4096 Aug 28 08:35 custom 
drwxr-xr-x 2 git  nogroup  4096 Aug 28 08:33 data 
drwxr-xr-x 4 git  nogroup  4096 Aug 28 08:33 docker 
-rw-r--r-- 1 git  nogroup  5359 Aug 27 09:22 glide.lock 
-rw-r--r-- 1 git  nogroup  1756 Aug 27 09:22 glide.yaml 
-rwxr-xr-x 1 git  nogroup 33831440 Aug 27 10:12 gogs 
-rw-r--r-- 1 git  nogroup  839 Aug 27 09:22 gogs.go 
drwxr-xr-x 2 git  nogroup  4096 Aug 28 08:33 log 
drwxr-xr-x 4 git  nogroup  4096 Aug 28 08:33 models 
drwxr-xr-x 34 git  nogroup  4096 Aug 28 08:33 modules 
drwxr-xr-x 4 git  nogroup  4096 Aug 28 08:33 packager 
drwxr-xr-x 14 git  nogroup  4096 Aug 28 08:33 public 
drwxr-xr-x 14 git  nogroup  4096 Aug 28 08:33 routers 
drwxr-xr-x 12 git  nogroup  4096 Aug 28 08:33 scripts 
-rw-r--r-- 1 root  root   2750 Aug 28 08:43 supervisord.log 
-rw-r--r-- 1 root  root    2 Aug 28 08:43 supervisord.pid 
drwxr-xr-x 18 git  nogroup  4096 Aug 28 08:33 templates 

Autres choses que j'ai essayé:

/home/git/go/src/github.com/gogits/gogs # cp gogs /usr/bin 
/home/git/go/src/github.com/gogits/gogs # /usr/bin/gogs 
ash: /usr/bin/gogs: not found 
/home/git/go/src/github.com/gogits/gogs # ls /usr/bin | grep gogs 
gogs 
/home/git/go/src/github.com/gogits/gogs # /usr/bin/gogs 
ash: /usr/bin/gogs: not found 
/home/git/go/src/github.com/gogits/gogs # ./usr/bin/gogs 
ash: ./usr/bin/gogs: not found 
/home/git/go/src/github.com/gogits/gogs # ls /usr/bin/gogs 
/usr/bin/gogs 

Exec'ng dans le récipient docker avec la commande sh Je commence à avoir des erreurs bizarres après un certain temps, ça peut avoir tendance à se produire après avoir ajouté à PATH la poubelle des gogs, je ne m'en souviens plus, mais c'est arrivé avant

/home/git/go/src/github.com/gogits/gogs # gogs 
sh: gogs: not found 
/home/git/go/src/github.com/gogits/gogs # ./gogs 
sh: ./gogs: not found 
/home/git/go/src/github.com/gogits/gogs # export PATH=PATH:/home/git/go/src/github.com/gogits/gogs 
/home/git/go/src/github.com/gogits/gogs # gogs 
sh: gogs: not found 
/home/git/go/src/github.com/gogits/gogs # cp gogs /usr/bin 
sh: cp: not found 
/home/git/go/src/github.com/gogits/gogs # cp gogs /usr/bin 
sh: cp: not found 
/home/git/go/src/github.com/gogits/gogs # cp 
sh: cp: not found 
/home/git/go/src/github.com/gogits/gogs # ls 
sh: ls: not found 

Aussi quand j'ai essayé de construire binocles de la source dans le conteneur que je suis une erreur de segmentation (core dump) STH comme ça. Je l'ai testé avec valgrind et obtenu STH comme

Info demandée:

FROM alpine:edge 

MAINTAINER [email protected] 

ENV DEBIAN_FRONTEND noninteractive 

COPY gogs /home/git/go/src/github.com/gogits/gogs 

WORKDIR /home/git/go/src/github.com/gogits/gogs 

RUN apk update && apk add --update \ 
    openssh \ 
    curl\ 
    git\ 
    supervisor ;\ 
    rm -rf /var/lib/apt/lists/* ;\ 
    adduser -S -g 'Gogs' git;\ 
    mkdir -p custom/conf \ 
    log\ 
    data\ 
    /var/log/gogs\ 
    /home/git/.ssh\ 
    /home/git/data\ 
    /var/run/sshd\ 
    /var/log/install\ 
    /var/log/sshd;\ 
    touch /home/git/.ssh/authorized_keys\ 
    /home/git/setup.sh \ 
    /home/git/data/gogs.db;\ 
    chmod 700 /home/git/.ssh && chmod 600 /home/git/.ssh/authorized_keys;\ 
    chown -R git: /var/log/gogs /var/log/sshd /home/git 

COPY app.ini custom/conf/app.ini 

COPY supervisord.conf /home/git/supervisord.conf 

COPY docker-entrypoint.sh /home/git/docker-entrypoint.sh 

COPY setup.sh /home/git/setup.sh 

RUN chmod +x /home/git/docker-entrypoint.sh /home/git/setup.sh 

EXPOSE 22 3000 

ENV DEBIAN_FRONTEND dialog 

ENTRYPOINT ["/home/git/docker-entrypoint.sh"] 

env

GOGS_USER_PASSWORD=mypassword 
HOSTNAME=e11c1f1b65cd 
SHLVL=1 
HOME=/root 
DOMAIN=abc.com 
[email protected] 
APP_NAME=sc 
API_USER_PASSWORD=mypassword 
TERM=xterm 
GOGS_USER=gogsuser 
[email protected] 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
DEBIAN_FRONTEND=dialog 
PWD=/home/git/go/src/github.com/gogits/gogs 
API_USER=apiuser 
+0

Indiquez votre Dockerfile complet. Pourriez-vous également lister votre environnement à l'intérieur du conteneur en utilisant 'env'. – Alkaline

+0

faire cela maintenant – Jonathan

+0

vient d'ajouter les fichiers – Jonathan

Répondre

1

Le principal problème est que vous utilisez une image qui n'a pas le Go bibliothèques nécessaires. Je suppose que vous ne compilez pas votre application Go pour votre système d'exploitation cible.

  1. compilation croisée

    Si vous compilez votre application sous Mac ou Windows, vous devez compiler traverser il. Pour cibler Linux 64 bits (Debian/Ubuntu), c'est comme ça. Les indicateurs des autres systèmes d'exploitation sont https://golang.org/doc/install/source#environment.

    C'est une bonne idée de nommer votre sortie binaire avec le nom de la plate-forme cible (_linux-amd64).

  2. Utilisez l'image golang:1.7 officielle

    C'est la façon la plus simple de le faire. L'image inclura déjà toutes les bibliothèques nécessaires.

Plus tard, vous pouvez vous intéresser à l'optimisation de la taille de votre image. C'est à ce moment que la liaison statique et Alpine deviennent utiles, mais ils ont leurs propres ensembles de pièges (pas de libc, donc le DNS pourrait ne pas se résoudre correctement en fonction de votre application). Ils peuvent être travaillés mais il ne vaut peut-être pas votre temps maintenant.

+0

J'ai déjà construit cette image avec golang: 1.6 et j'ai obtenu une taille d'image de 1 Go + golang par elle-même est d'environ 700mb. En fait, j'ai juste essayé de créer une corbeille liée statiquement avec 'CGO_ENABLED = 0 allez get -a -ldflags '-s' -tags" sqlite "-u./...' dans le dossier gogs mais j'ai 'github de paquetage. com/mattn/go-sqlite3: Les fichiers source C ne sont pas autorisés lorsque vous n'utilisez pas cgo ou SWIG: sqlite3-binding.c »ne savez pas comment procéder – Jonathan

+0

Installation de gogs avec les éléments suivants; 'WORKDIR $ GOPATH/src/github.com/gogits' ' git clone --depth = 1 -b développer https: // github.com/gogits/gogs' 'cd gogs; go -tags "sqlite" -u./... ' ' go build -tags "sqlite" ' – Jonathan

+0

Une façon courante consiste à le construire dans un conteneur golang mais à le déployer (COPY) dans un conteneur Debian (~ 160 Mo). Construire en utilisant 'docker run --rm -v" $ PWD ":/go/src/github.com/myco/myapp \ -w /go/src/github.com/myco/myappgolang: 1.7 \ aller construire -a -ldflags '-s' -o myapp_linux-amd64' Ensuite, vous pouvez le copier dans une image 'FROM: debian: 8.5'. – Alkaline