Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
43
Help us understand the problem. What is going on with this article?
@KentoDodo

Volume相対パス指定でもdocker runがしたい!

More than 3 years have passed since last update.

結論

相対パスの先頭に$PWDを付けることで解決できます。

現象

docker runのVolumeを相対パス指定がしたい。
なぜなら、例えばGitHubのREADME.mdのUsageを書くときに、「このファイルのあるディレクトリ上で以下のコマンドを実行してね」という形で実行コマンドを書きたいからです。絶対パスで記述してしまうと、そのまま使えないのです。

ところが・・・

$ docker build -t original_ubuntu .  # dockerbuildファイルが現在いるディレクトリ内に存在しているものとする
$ docker run -it -v .:/temp original_ubuntu
docker: Error response from daemon: create .: volume name is too short, names should be at least two alphanumeric characters.
See 'docker run --help'.

ひえぇ〜😅
どうやら、-vのホスト側ディレクトリは絶対パスもしくは名前を指定するということで、相対パスの指定はできないようです。
(参考: http://docs.docker.jp/engine/reference/run.html#volume

解決法

(簡単)$PWDをつける

相対パスの冒頭に環境変数$PWDを付ければ解決できます。

$ docker run -it -v $PWD:/temp original_ubuntu

MacOSXやUbuntuなどでは、環境変数$PWDによって実行中のディレクトリの絶対パスを取得できるのを利用しています。
なお、万が一、環境変数$PWDが設定されていないOS上で実行する場合は、上述の$PWD$(pwd)に置き換えてください。

docker-composeを使う

docker-composevolumesを使えば解決できます。(これだけのために使うのは変ですが。。。)

具体的には、まずdocker-composeをインストールします。(詳細な説明は省略します。)

次に、dockerfileと同じディレクトリにdocker-compose.ymlを用意します。

docker-compose.yml
version: "3"

services:
  main:
    build:
      context: .
      dockerfile: dockerfile
    container_name: original_ubuntu
    volumes:
      - ./:/temp

最後に、以下のコマンドを実行すれば、起動します。

$ docker-compose run main

最後に

大きなプロジェクトでは環境変数などでパスの管理をする方が良いのでしょうが、
小さなプロジェクトやテスト的に色々試してみた結果を残したいときに是非お使いください。

43
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KentoDodo
docker-composeが大好き。 昔はiOSやAndroidのフロントエンジニア、今はB向けか社内向けのwebサービスのアプリエンジニアやってます。 実は、気象予報士資格を持ってたりします。趣味は、旅行 のち 天体写真撮影 です。
weathernews
ウェザーニューズは、気象リスクを軽減するための気象情報サービスを行なっています。そのための気象予測やその情報活用に関するサービス開発や研究を行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
43
Help us understand the problem. What is going on with this article?