docker-compose - 容器在构建过程中没有互联网

Tax*_*ool 3 docker dockerfile docker-compose

我在堆栈和超级用户上检查了很多类似的问题,但找不到我的确切案例,所以我决定问这个。

我的问题是我的容器仅在构建过程中无法访问互联网。意味着如果我从 Dockerfile 中注释掉任何需要互联网的命令并将执行命令设置为 tail -f /dev/null 然后转到容器 shell,那么我就可以访问互联网。

这是我的失败设置:

我的 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
Run Code Online (Sandbox Code Playgroud)

和 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"]
Run Code Online (Sandbox Code Playgroud)

这将失败并输出以下内容:

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".
Run Code Online (Sandbox Code Playgroud)

这表明无法访问互联网。

但是,当我注释掉纱线命令并在构建完成后手动执行它们并且在容器的外壳中时,一切正常。

工作设置:

与此 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"]
Run Code Online (Sandbox Code Playgroud)

并安装依赖项并从容器 shell 手动运行应用程序。

知道为什么这种没有互联网的事情只发生在构建过程中吗?

PS:如果我从 docker-compose.yml 中删除 network_mode: host,即使在构建后我也不会上网。

Tax*_*ool 5

我的问题通过添加网络:主机来解决构建部分。

仍然不知道为什么我的 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
Run Code Online (Sandbox Code Playgroud)