在尝试创建和运行新的 docker 容器时,我遇到了一个令人沮丧的问题。当我将代码上传到 Github 存储库,然后使用 Docker Hub 构建它时,构建完成且没有任何错误。但是,当我尝试在自己的服务器上创建并运行新容器时,我发现必要的文件和目录尚未复制到新容器中或与容器目录绑定的本地目录中(显然如此)。但奇怪的是,似乎init.sh
我的 Dockerfile 末尾引用的脚本是正在复制,因为它运行,但失败了,因为应该复制到的其他文件WORKDIR
不存在。我尝试了不同的文件结构和COPY
命令,但无济于事,目前所有要复制的文件和目录都在存储库的根目录中。这是我当前的 Dockerfile:
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json /usr/src/app/
RUN \
npm install -g @adonisjs/cli && \
npm install
COPY . /usr/src/app/
VOLUME /usr/src/app
RUN \
cp /usr/src/app/init.sh /usr/local/bin/ && \
chmod 755 /usr/local/bin/init.sh && \
ln -s usr/local/bin/init.sh / # backwards compat
EXPOSE 8080
CMD ["/init.sh"]
我的 docker create 和 docker run 命令:
docker create --name='ferdi-server' -p '3333:80' -v '/mnt/cache/appdata/ferdi-server':'/usr/src/app' 'xthursdayx/ferdi-server-docker'
docker run -d --name='ferdi-server' -p '3333:80' -v '/mnt/cache/appdata/ferdi-server':'/usr/src/app' 'xthursdayx/ferdi-server-docker'
有什么想法吗?我已经尝试解决这个问题两天了,但还是无果而终。
仅供参考,以下是我最近尝试过的文件结构和 COPY 命令
├── Dockerfile
├── init.sh
│ └── api
│ ├── package.json
│ ├── package-lock.json
│ ├── .env.example
│ ├── etc
│ ├── init.sh
│ └── app
│ | └── directory
│ └── config
│ └── app.js
│ └── etc.js
使用命令 COPY api/ /usr/src/app/
和
├── Dockerfile
├── init.sh
├── package.json
├── package-lock.json
├── .env.example
├── etc
├── init.sh
│ └── app
│ └── directory2
│ └── config
│ └── app.js
│ └── etc.js
使用命令 COPY . /usr/src/app/