我正在尝试将shell脚本添加到容器中,然后将其作为构建的一部分运行.
这是dockerfile的相关部分:
#phantomjs install
COPY conf/phantomjs.sh ~/phantomjs.sh
RUN chmod +x ~/phantomjs.sh && ~/phantomjs.sh
Run Code Online (Sandbox Code Playgroud)
这是构建期间的输出:
Step 16 : COPY conf/phantomjs.sh ~/phantomjs.sh
---> Using cache
---> 8199d97eb936
Step 17 : RUN chmod +x ~/phantomjs.sh && ~/phantomjs.sh
---> Running in 3c7ecb307bd3
[91mchmod: [0m[91mcannot access '/root/phantomjs.sh'[0m[91m: No such file or directory[0m[91m
Run Code Online (Sandbox Code Playgroud)
我正在复制的文件存在于构建目录下面的conf文件夹中......但无论我做什么,它似乎都没有复制过.
不要依赖shell扩展类似~的COPY说明.使用COPY conf/phantomjs.sh /path/to/user/home/phantomjs.sh,而不是!
使用~用户主目录的快捷方式是shell提供的功能(即Bash或ZSH).COPYDockerfile中的指令不在shell中运行; 他们只是将文件路径作为参数(也参见手册).
使用最小的Dockerfile可以轻松地重现此问题:
FROM alpine
COPY test ~/test
Run Code Online (Sandbox Code Playgroud)
然后构建并运行:
$ echo foo > test
$ docker built -t test
$ docker run --rm -it test /bin/sh
Run Code Online (Sandbox Code Playgroud)
在ls -l / 容器内部运行时,您将看到docker build没有扩展~到/root/,但实际上创建了以~该文件命名的目录test:
/ # ls -l /~/test.txt
-rw-r--r-- 1 root root 7 Jan 16 12:26 /~/test.txt
Run Code Online (Sandbox Code Playgroud)
小智 3
不确定,但也许~在 Dockerfile 中引用了主机上的$HOME, 。/home/$USER
我会尝试更改显式文件夹的引用~或$HOME更改显式文件夹的引用/root:
#phantomjs install
COPY conf/phantomjs.sh /root/phantomjs.sh
RUN chmod +x /root/phantomjs.sh && /root/phantomjs.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |