2017-03-05 8 views
0

を開始する相対的な輸入を必要とするDockerfilesで作曲、これは私のプロジェクト階層である:ドッカー-作曲は:

myproj/ 
    - commons1/ 
     - com1_file1.go 
     - ... 
    - commons2/ 
     - com2_file1.go 
     - ... 
    - module1/ 
     - mod1_file1.go 
     - Dockerfile 
     - ... 
    - module2/ 
     - mod2_file1.go 
     - Dockerfile 
     - ... 
    - docker-compose.yml 

私は何をしたいことはmodule1module2コンテナが起動したときに、彼らそれぞれが持っているということですそれぞれcommonsNディレクトリのコピーをGOPATHのディレクトリに置いて、それぞれがcommonsNディレクトリの公開ライブラリにアクセスできるようにします。

例えば、私はmodule1のための容器で、このようなものを見たい:

/go/ 
    - src/ 
     - commons1/ 
      - com1_file1.go 
      - ... 
     - commons2/ 
      - com2_file1.go 
      - ... 
     - module1/ 
      - mod1_file1.go 
      - ... 

理由ビーイングが、これは基本的なことであるかのコースの他のモジュールを追加した私の地元GOPATHルックス( )私は私のソースファイルでこのような何かを行うことができるように:

package main 

import(
    "fmt" 
    "myproj/commons1" 
) 

func main() { 
    fmt.Println("Some thing from common library :", commons1.SomethingFromCommons) 
} 

ドッカーの私の素朴な理解から、私がの線に沿って何かをする私のDockerfilesを変更することはできませんよ表示されます、私はこれを達成するためにどのように行くのだろうかと思っていますか?

ソースコードが会社のプロキシの背後にあるので、Githubのルートには行かないことを強くお勧めします。すべての設定を単純にいくつかのディレクトリをコピーするよりも長くする予定です。私はバラットからの提案につき、このような何かを見て、私のdocker-compose.ymlファイル更新した

編集module1ため

version: '2' 

services: 
    module1: 
     volumes: 
      - ./commons1:/go/src/myproj/commons1 
     build: module1/ 

Dockerfileは次のようになります。

FROM golang:1.8.0 

RUN mkdir -p /go/src/app 
WORKDIR /go/src/app 

COPY . /go/src/app 
RUN go get -d -v 
RUN go install -v 

ENTRYPOINT /go/bin/app 

EXPOSE 8080 

docker-compose buildgo get -d -vに失敗しますエラー:

package myproj/commons1: unrecognized import path "myproj/commons1" (import path does not begin with hostname)

myproj/commons1/go/src/にコピーされた場合、これは問題ではありませんか?私は当時それはコピーされていないと思いますか?

+0

しかし、[OK]をいや、私はあることを読んで、あなたがすることができ、あなたのホストボリューム/ディレクトリ... https://docs.docker.com/compose/compose-file/#volumes-volumedriver – barat

+0

をバインドマウントドッキングウィンドウ-構成で私はそれがどのように働いたか完全にはわからなかった。私は、 './commons1:/ go/src/commons1'のような行を、作成ファイルの' volumes'の下のボリュームとして追加するだけですか? – rawa

+0

はい - 左の部分(before :)はあなたのホストパスで、右部分(after :)はコンテナの中のマウントポイントを定義します。あなたはそれらの複数を使用することができます:) – barat

答えて

0

基本的に$GOPATH/srcmyproj/commons1がインストールされていないと不満を表明していたので、go get -d -vコマンドが問題でした。

version: '2' 

services: 
    module1: 
     volumes: 
      - ./commons1:/go/src/myproj/commons1 
     build: module1/ 
     ports: 
      - "8080:8080" 
     command: bash -c "go get -d -v && go install -v && /go/bin/app 

これは明らかである:ドッカー作曲はそれがdocker-compose buildgo getを実行する前に、私が言及したボリュームをマウントされなかったので、私は私のdocker-compose.ymlで周りの仕事をしたが、それははるかにエレガントからであるため、当然の容疑者のこの私がいました私がdocker-compose buildを実行したかどうかに関係なく、docker-compose upを実行するたびに私のGoバイナリが再構築されるため、理想から遠いです。

これはまた、別のコンテナが完全に起動し、それが非常に乱雑になるまで、特定のコンテナのためにdockerizeを使用したかったので問題があります。

2

他の画像が基づいているcommons1とを含む画像を作成できます。

FROM golang:1.8.0 
RUN mkdir -p /go/src/myproj/commons1 && mkdir -p /go/src/myproj/commons2 
COPY commons1/ /go/src/myproj/commons1/ 
COPY commons2/ /go/src/myproj/commons2/ 

欠点は、これはあなたが共通のプロジェクトの1を更新するたびに、外部ビルドステップを必要としている。

docker build -t me/myproj:commons . 

その後、あなたのコンアプリをせずに通常通りの代わりgolangのコモンズの画像に依存して構築することができますボリューム。

FROM me/myproj:commons 
... 
関連する問題