我已经在堆栈和超级用户上检查了很多类似的问题,但找不到我的确切案例,所以我决定问这个问题。
我的问题是,我的容器不能只在构建过程中访问互联网。这意味着如果我从do文件中注释掉任何需要互联网的命令,并将执行命令设置为tail -f /dev/null,然后转到容器外壳,那么我确实可以访问互联网。
下面是我失败的设置:
我的docker-compose.yml:
version: '3.7'
services:
admin-panel:
network_mode: host
container_name: react-admin
build:
context: Admin-Panel
volumes:
- ./Admin-Panel:/app
- /app/node_modules
ports:
- '5000:5000'
stdin_open: true
tty: true和Dockerfile:
FROM node:13.12.0-alpine
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json yarn.lock ./
RUN yarn --pure-lockfile --silent
COPY . ./
RUN yarn build
CMD ["serve" "-s" "build"]这将失败,并显示以下输出:
docker-compose up --build
Building admin-panel
Step 1/9 : FROM node:13.12.0-alpine
---> 483343d6c5f5
Step 2/9 : WORKDIR /app
---> Using cache
---> 5cd6ae583081
Step 3/9 : ENV PATH /app/node_modules/.bin:$PATH
---> Using cache
---> 77db61e579e4
Step 4/9 : COPY package.json yarn.lock ./
---> Using cache
---> 52e5361fb0fa
Step 5/9 : RUN yarn --pure-lockfile --silent
---> Running in 803c8d85c8e5
error An unexpected error occurred: "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz: getaddrinfo EAI_AGAIN registry.yarnpkg.com".这表明没有互联网接入。
但是,当我注释掉yarn命令,并在构建完成后手动执行它们时,我在容器的shell中,一切都正常。
工作设置:
与此Dockerfile相同的docker-compose:
FROM node:13.12.0-alpine
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json yarn.lock ./
# RUN yarn --pure-lockfile --silent
COPY . ./
# RUN yarn build
# CMD ["serve" "-s" "build"]
CMD ["tail", "-f", "/dev/null"]并手动安装依赖项并从容器shell运行应用程序。
你知道为什么这种没有互联网的事情只发生在构建过程中吗?
附言:如果我从我的docker-compose.yml中删除network_mode: host,我将不会有互联网,即使在构建之后。
发布于 2020-09-21 02:46:31
通过将network: host添加到build部分,我的问题得到了解决。
仍然不知道为什么我的docker网桥网络不能工作。
version: '3.7'
services:
admin-panel:
network_mode: host
container_name: react-admin
build:
context: Admin-Panel
# the line below fixed it
network: host
volumes:
- ./Admin-Panel:/app
- /app/node_modules
ports:
- '5000:5000'
stdin_open: true
tty: true发布于 2020-09-20 14:53:23
如果只有network_mode主机能为你工作,那就意味着docker的网桥网络“卡住”了。重新启动docker守护程序应该可以解决此问题。
在构建时,docker会创建短暂的容器/镜像。通常情况下,它们会在成功构建时被移除,但它们也可能会“卡住”。尝试使用"--no-cache“标志构建您的镜像。从您发布的输出来看,构建中以前的所有层都是缓存层。
https://stackoverflow.com/questions/63972884
复制相似问题