如何使用 docker-compose 在容器内复制文件

Dra*_*ban 5 docker docker-compose docker-image docker-volume docker-container

我有一个运行 jar 文件的简单图像。映像内的 jar 文件需要特殊的配置文件才能运行。

在 docker-compose.yml 所在的位置,我有一个名为“Carrier”的文件夹,在该文件夹下我有该文件。

docker-compose.yml:

version: "3.3"
services:
    web:
        image: "myimage:1.80.0.0"
        ports:
            - "61003:61003"
        volumes:
            - ./carrier:/var/local/Config/
    
Run Code Online (Sandbox Code Playgroud)

当我点击docker-compose up它时,它抱怨该文件不存在,因此它不会复制它。如果我像在 .sh 命令中那样执行另一个选项,如下所示:

       volumes:
            - ./carrier:/var/local/Config/:shared
Run Code Online (Sandbox Code Playgroud)

它抱怨另一个错误:

C:\Tasks\2246>docker-compose up
Removing 2246_web_1
Recreating 1fbf5d2bcea4_2246_web_1 ... error

ERROR: for 1fbf5d2bcea4_2246_web_1  Cannot start service web: path /host_mnt/c/Tasks/2246/carrier is mounted on / but it is not a shared mount
        
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

Muh*_*rio 8

使用 Dockerfile 复制文件,使用如下;

FROM myimage:1.80.0.0
RUN mkdir -p /var/local/Config/
COPY carrier /var/local/Config/
EXPOSE 61003
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: "3.3"
services:
  web:
    build:
      dockerfile: Dockerfile
      context: '.'
   ports:
    - "61003:61003"
Run Code Online (Sandbox Code Playgroud)

最后,运行以下命令来构建新映像并启动容器

  • docker-compose up -d --build


小智 -1

删除最后一个/

volumes:
  - ./carrier:/var/local/Config
Run Code Online (Sandbox Code Playgroud)