docker react 在本地主机中不起作用

IT技术 javascript reactjs docker dockerfile
2021-05-23 02:19:57

我正在尝试使用 docker 运行我的 React 应用程序,当我运行容器时,一切似乎都很好,但我无法在本地主机(或 127.0.0.1)上访问它。这是我的配置:

Dockerfile:

FROM node:carbon

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

COPY package.json /usr/src/app

RUN npm install

COPY . /usr/src/app

EXPOSE 8090

CMD ["npm", "run", "start-test"]

包.json

"start-test": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.dev.config --inline --hot --history-api-fallback --port 8090 --public localhost:8090 --host 0.0.0.0"

webpack.common.js

const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  entry: {
    app: [
      // 'react-hot-loader/patch',
      'babel-polyfill',
      path.join(__dirname, 'src', 'index.js'),
    ],
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/',
  },
  module: {...},
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      template: './src/index.html',
      title: 'Production',
      // hash: true,
      filename: './index.html',
    }),
    new webpack.NamedModulesPlugin(),
  ],
  resolve: {
    extensions: [' ', '.js', '.jsx', '.json'],
    modules: [
      path.join(__dirname, 'src'),
      path.join(__dirname, 'node_modules'),
    ],
  },
};

配置文件

module.exports = merge(common, {
  devtool: 'inline-source-map',
  devServer: {
    contentBase: './dist',
    disableHostCheck: true,
  },
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'sass-loader'],
      },
    ],
  },
  plugins: [
    new ExtractTextPlugin({
      filename: 'app.css',
      disable: true,
    }),
  ],
});

当我使用构建时一切都很好

docker build --no-cache . -t seyaa/client

然后我使用启动容器

docker run  seyaa/client

这是控制台的结尾

> redux-minimal@1.0.0 start-test /usr/src/app
> ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.dev.config --inline --hot --history-api-fallback --port 8090 --public localhost:8090 --host 0.0.0.0

clean-webpack-plugin: /usr/src/app/dist has been removed.
Project is running at http://localhost:8090/
webpack output is served from /
Content not from webpack is served from ./dist
404s will fallback to /index.html
Hash: 64fdd9746e89b58394d3
Version: webpack 3.11.0
Time: 13617ms

终端看起来不错,但我无法访问http://localhost:8090http://127.0.0.1:8090http://0.0.0.0:8090

任何帮助,将不胜感激。

谢谢

编辑:我在 mac 上运行

2个回答

如果这是从容器的输出,那么你正在收听的localhost 容器,这是不一样的主机上让服务器监听0.0.0.0而不是localhost检查这篇文章)然后尝试点击localhost你的主机。您也没有通过它的外观向您的主机公开任何端口,因此您还需要将您的端口更改docker rundocker run -p 8090:8090 seyaa/client.

必须先启动容器,然后才能在其中运行命令。

docker start seyaa/client

然后你可以运行例如。如地狱

docker run seyaa/client /bin/sh