を開始する相対的な輸入を必要とするDockerfilesで作曲、これは私のプロジェクト階層である:ドッカー-作曲は:
myproj/
- commons1/
- com1_file1.go
- ...
- commons2/
- com2_file1.go
- ...
- module1/
- mod1_file1.go
- Dockerfile
- ...
- module2/
- mod2_file1.go
- Dockerfile
- ...
- docker-compose.yml
私は何をしたいことはmodule1
とmodule2
コンテナが起動したときに、彼らそれぞれが持っているということですそれぞれ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 build
はgo get -d -v
に失敗しますエラー:
package myproj/commons1: unrecognized import path "myproj/commons1" (import path does not begin with hostname)
myproj/commons1
が/go/src/
にコピーされた場合、これは問題ではありませんか?私は当時それはコピーされていないと思いますか?
しかし、[OK]をいや、私はあることを読んで、あなたがすることができ、あなたのホストボリューム/ディレクトリ... https://docs.docker.com/compose/compose-file/#volumes-volumedriver – barat
をバインドマウントドッキングウィンドウ-構成で私はそれがどのように働いたか完全にはわからなかった。私は、 './commons1:/ go/src/commons1'のような行を、作成ファイルの' volumes'の下のボリュームとして追加するだけですか? – rawa
はい - 左の部分(before :)はあなたのホストパスで、右部分(after :)はコンテナの中のマウントポイントを定義します。あなたはそれらの複数を使用することができます:) – barat