我的Dockerfile包含一些cp
linux命令
因为项目中的某些文件被标记为xxx.php.sample
等样本,因此应将其替换为xxx.php
。
我认为这个过程应该在Dockerfile
上执行。所以我这样写了。
Dockerfile-PHP-apache的
FROM php:5.5-apache
RUN apt-get update && \
docker-php-ext-install pdo_mysql mysqli mbstring
RUN a2enmod rewrite
RUN a2enmod substitute
ADD . /var/www
WORKDIR /var/www
RUN cp config.php.sample config.php
RUN cp shared_config.php.sample shared_config.php
RUN cp vendor/propel/propel1/build.properties.sample vendor/propel/propel1/build.properties
RUN sed -i -E "s/host=(.*);/host=mysql-db;/" ./vendor/propel/propel1/build.properties
COPY docker-php-apache/php.ini /usr/local/etc/php/
搬运工-compose.yml
version: '2'
services:
mysql-db:
build:
context: .
dockerfile: Dockerfile-mysql-server
ports:
- "3306:3306"
php-apache:
build:
context: .
dockerfile: Dockerfile-php-apache
volumes:
- .:/var/www
ports:
- "80:80"
depends_on:
- mysql-db
在docker-compose build
和docker-compose up
之后(没有发生错误),这是cp
结果。
RUN cp config.php.sample config.php - >找不到 config.php
RUN cp shared_config.php.sample shared_config.php - > 找不到shared_config.php
RUN cp vendor / propel / propel1 / build.properties.sample vendor / propel / propel1 / build.properties - >找不到 build.properties
我认为路径错了,所以我复制了上面的命令并直接执行了。 (我可以通过docker exec -it xxx_php-apache_1 bash
登录容器。)
cp
命令很好用,我可以在容器和本地源中找到复制的文件。
有没有人弄清楚为什么Dockerfile上的cp
命令不起作用?
这是对应的构建日志。
Step 5 : COPY config.php.sample /var/www/config.php
---> afa7e6139049
Removing intermediate container 38b9968ac061
Step 6 : COPY shared_config.php.sample /var/www/shared_config.php
---> 78ea51045d4e
Removing intermediate container fe0b382914bd
Step 7 : COPY vendor/propel/propel1/build.properties.sample /var/www/vendor/propel/propel1/build.properties
---> 34c186a193c0
Removing intermediate container c55bb9565035
Step 8 : COPY docker-php-apache/php.ini /usr/local/etc/php/
---> 4e3e92aa0f97
Removing intermediate container f2c424eb6c38
Successfully built 4e3e92aa0f97
以防万一,我在容器上执行了find
命令。
root@d98556ed051a:/var/www# find / -iname '*shared_config.php*'
/var/www/shared_config.php.sample
另外,我测试了另一台笔记本电脑,但结果是一样的。 这些是经过测试的PC。
每台PC都使用Docker for Mac 版本1.12.1(版本:12133)
答案 0 :(得分:2)
方法#1
我相信Dockerfile
的以下陈述可以更改
发件人:强>
ADD . /var/www
WORKDIR /var/www
RUN cp config.php.sample config.php
RUN cp shared_config.php.sample shared_config.php
RUN cp vendor/propel/propel1/build.properties.sample vendor/propel/propel1/build.properties
要强>
ADD config.php.sample /var/www/config.php
ADD shared_config.php.sample /var/www/shared_config.php
ADD vendor/propel/propel1/build.properties.sample /var/www/vendor/propel/propel1/build.properties
当然,您也可以使用COPY
代替ADD
。
方法#2
更改以下声明:
RUN cp config.php.sample config.php
RUN cp shared_config.php.sample shared_config.php
RUN cp vendor/propel/propel1/build.properties.sample vendor/propel/propel1/build.properties
致:
RUN ["cp", "config.php.sample", "config.php"]
RUN ["cp", "shared_config.php.sample", "shared_config.php"]
RUN ["cp", "vendor/propel/propel1/build.properties.sample", "vendor/propel/propel1/build.properties"]
有关详细信息,请参阅documentation。
希望这有用。
答案 1 :(得分:0)
出于某种原因,似乎cp
命令通过您的Dockerfile的RUN
指令运行,并不希望第二个参数成为目标文件名。
请考虑以下事项:
RUN cp config.php.sample config.php
找不到
config.php
不应该尝试查找 config.php
,而是创建它。
我认为你可能会更好地使用:
RUN mv config.php.sample config.php
这也会删除你的(现在没用的)config.php.sample
文件。好吧,它不会删除也不会创建任何内容,只需重命名您的文件 - 这正是您想要的:)